Nei mesi precedenti ho fatto molte domande sull'architettura di un'applicazione su cui sto lavorando. Grazie alle risposte, la progettazione architettonica è cambiata, infatti è stata semplificata come mostrato nel seguente grafico:
Internamente ho due servizi ( NOT WCF! ) che seguono i principi CQS. Significa che il servizio di query restituisce semplicemente le viste del database; mentre il servizio di comando ha un modello di dominio completo che contiene tutta la logica aziendale e repository per accedere al database (nessun meccanismo di eventi o altro schema complesso qui). Entrambi i servizi utilizzano lo stesso database. Questi servizi sono librerie di classi, NO servizi WCF, perché vengono utilizzati solo internamente quindi non ho bisogno del sovraccarico di WCF (non distribuire i tuoi oggetti, la prima legge di Martin Fowler).
Queste operazioni interne sono utilizzate dal sito MVC di ASP.NET e dal PartnerService. Questo servizio Partner è un servizio WCF che espone le funzionalità che vorrei essere esposto ai partner.
Se dovessi mai scalare a causa del traffico intenso, potrei aggiungere server web e / o migrare parti a un sistema CQRS completo (i miei contratti sono già stati progettati per questo).
Qualcuno vede qualche problema con questo?
Una cosa che vedo è che se la query o il servizio di comando cambia, questo influisce direttamente sul sito web e sul servizio partner, quindi devo distribuire le modifiche su entrambi. Ma non so se questo è un problema ...?
Ogni feedback è apprezzato! Grazie!