Ho letto molti argomenti su come rendere ef core + ddd lavorare insieme, ma mostrano solo un esempio in cui abbiamo un solo microservizio. Ho bloccato la soluzione per mettere EF Core + DDD esattamente dove è più di uno. Ad esempio abbiamo 1 database e 2 microservizi (identità, pianificazione). In ogni servizio dobbiamo mantenere il proprio contesto limitato. Il servizio di identità funziona solo con le tabelle Utente, Ruolo, ... ... Al contrario, programma il servizio con Utente, Appuntamento, ecc. Inoltre, quando progettiamo un modello di dominio, utilizziamo solo le proprietà di cui abbiamo bisogno. Quindi, nel servizio di appuntamenti per l'entità utente, devo solo utilizzare Id, NameDetails, Address, ContactInfo quando nel servizio di identità utilizzo Email, Password, ecc. La domanda è: dovrei utilizzare il diverso contesto db per ogni microservizio? Se sì, come dovrei gestire le migrazioni in quel caso?
Utilizzare un database per due o più microservizi è una contraddizione in sé. Un microservizio dovrebbe essere autonomo, nel senso che non dovrebbe condividere lo stesso database con un microservizio diverso.
Se è necessario fare riferimento a un user-id
ad esempio in due servizi, si memorizzerà solo questo id, sia esso un numero intero, una stringa o qualsiasi altro tipo di chiave.
Il tuo secondo database non sarà in grado di convalidare l'esistenza di quella chiave esterna, dal momento che non conosce la tabella in cui sono memorizzati gli Users
.
Si vorrebbe creare un singolo contesto db per ogni servizio, che ha le proprie migrazioni e il proprio database, quando si desidera veramente utilizzare i microservizi.
Se si desidera comunque utilizzare lo stesso database per farlo, è possibile creare molti DbContexts che puntano effettivamente allo stesso database, ma definiscono solo un insieme di entità.
In generale ci sono diversi livelli di progettazione basata sul dominio. È possibile eseguire la progettazione basata sul dominio senza microservizi e anche senza sistemi distribuiti. Parole chiave come Aggregates
, Commands
and Events
, Distributed Systems
fanno tutti parte del domain-driven-design
.
Alcune risorse da leggere su domain-driven-design
https://stackoverflow.com/a/1222488/5397642
https://martinfowler.com/bliki/DDD_Aggregate.html
https://medium.com/withbetterco/using-aggregates-and-factories-in-domain-driven-design-34e0dff220c3