Domanda

La mia squadra sta cominciando implementazione di un'applicazione greenfield, con un requisito per il multi-tenancy. Ho fatto una grande quantità di ricerche su modelli per il semplice scalabilità, in particolare sulle infrastrutture cloud-based distribuito, e CQRS sembra essere la parola d'ordine del giorno (arrivando persino essere chiamato "Crack per l'architettura Addicts" che trovo abbastanza divertente ). Vantaggi e le insidie ??a parte, è abbastanza difficile trovare qualcuno oltre Greg Young che ha utilizzato questa idea ampiamente (o affatto) in applicazioni di produzione e in grado di fornire una guida nel mondo reale per esso.

Così qui sono le mie domande: 1. Se un'architettura CQRS ospitare l'applicazione tipica multi-tenant, o è meglio adatti per le applicazioni aziendali interne su scala più grande. 2. Se si consiglia che è usato in questa situazione, si può fornire un orientamento da-the-trincee su approcci - soprattutto sulle cose da ottenere destra nella fase iniziale, quindi cosa aspetti dovrebbero essere evoluta organicamente. 3. Se qualcuno ha provato e l'ho trovato troppo difficile o non realizzate i benefici, o ha forti argomenti contro di essa (e raccomandare attaccare a CRUD e la progettazione a più livelli), vorrei sapere di quelle esperienze pure.

Per riferimento, l'applicazione sarà scritto in .NET e il front-end sarà inizialmente basato sul web (ASP.NET MVC), potenzialmente esteso a clienti di telefonia mobile e di spessore. Concorrenza, l'attività transazionale, e il volume di dati sono tutti destinati a restare relativamente bassi per tutta la durata della vita della domanda (rispetto alle applicazioni finanziarie ad alto volume e simili). Per le infrastrutture, abbiamo intenzione di utilizzare Azure.

È stato utile?

Soluzione

Ho esaminato lo stesso punto di partenza me stesso, dal punto di vista esplorativo prima di intraprendere il progetto vero e proprio (siamo ancora in attesa del finanziamento di business). In questo, la mia ricerca e di opinione formato da essa è che l'asse multi-tenant dell'architettura è in gran parte ortogonale per l'utilizzo del CQRS per la progettazione interna di un servizio di grana grossa. Le multi-tenant luoghi requisito aggiuntivo vincoli generali di tutto come l'applicazione segrega gli inquilini da un titolo, i dati, la presentazione / personalizzazione, implementazione / provisioning e scalabilità punto di vista. CQRS realtà non rendere questo meglio o peggio e, secondo me ha ancora un valore nell'affrontare le sfide architettonici di pregio per i Servizi. Detto questo, non tutti i servizi che vagamente collaborano per fornire la necessità dell'applicazione di seguire il modello CQRS sia, a condizione che l'architettura debolmente accoppiato scelto non vietare l'uso.

Altri suggerimenti

  1. Multi-tenancy cambieranno un po 'di lettura CQRS lato. Avrete bisogno di visualizzazioni filtrate e dati relativi inquilino di ritorno solo. E si dovrà affrontare gli stessi problemi con qualsiasi altro architettura.
  2. Suggerirei CQRS perché renderà l'applicazione di una task-based (non un CRUD base). Essa significa che si avrà comandi ricevuti dall'interfaccia utente e saranno più significativo di DTOs. Se si desidera scrivere il vostro core con principi DDD poi cercare di evitare Anemic Domain Model ( http://martinfowler.com /bliki/AnemicDomainModel.html ). Approccio per fare questo - spostare ogni logica di dominio specifico per oggetti di dominio. I gestori comando dovrebbe essere molto semplice (autenticazione, caricare radice di aggregazione, tradurre oggetto comando per chiamata di metodo, se sono stati gettati senza eccezioni - applicare le modifiche). Vale la pena di guardare il record di Greg classe (6 ore e mezza): http://cqrsinfo.com/video/ Come Michael Shimmins detto che se si prevede di utilizzare Azure come piattaforma - vale la pena di guardare ai progetti Lokad.CQRS. L'ho usato per implementare uno dei nostri progetti.
  3. CQRS non si adatta se si ha realmente bisogno di semplice applicazione CRUD (non task-based). CQRS richiedono più tempo per capire che è principi per i nuovi arrivati. D'altra parte essa permetterà di compiti dev separati tra programmatori dominio-core e meno esperti Visualizza-> dto-> ui programmatori.

Non credo multi-tenant è affatto più duro / più semplice utilizzando CQRS. Lei ha diversi vantaggi se si utilizza messaggistica: è possibile incorporare l'identificazione inquilino in comandi e gli eventi come dati di intestazione, selezionare un eventstore basato sull'identificazione, unire multi-tenant con multi-istanza. Eppure, chiedetevi se il vostro dominio è altamente collaborativo e hanno un esperto di dominio a vostra disposizione ... altrimenti si finisce con il comando / evento-CUD; -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top