In tutti i libri DDD che ho letto fino ad ora, dicono che un contesto limitato può avere una propria architettura di implementazione, che suggerisce una singola architettura per contesto limitato .
Nel mio viaggio di DDD e anche CQRS, ho trovato in un contesto limitato, alcuni concetti di dominio sono adatti per un modello di dominio ricco, quindi avrò radici aggregate, oggetti valore ed entità per quelli. Ma oltre a quelli, ho un certo numero di cose che sono semplici ma strettamente correlate a quei concetti di dominio.
Ad esempio, nella mia applicazione, gli utenti possono aggiungerne altri come utenti, creare un gruppo di chat aggiungendo molti utenti, aggiungere post, ecc. Quindi ho radici aggregate per utenti, gruppi di chat, post. Ma ci sono cose come bloccare un altro utente, contrassegnare un utente come importante, contrassegnare un gruppo di chat come importante. Si tratta principalmente di impostazioni che implicano una relazione user-user
o una relazione user-chatgroup
. È un modello imbarazzante queste cose come aggregati. Ogni diversa impostazione non è molto correlata agli altri, quindi raggruppare tutte le impostazioni di user-user
in un grande aggregato è anche strano.
Al momento, per me è più semplice avere due implementare l'architettura all'interno di un contesto limitato : 1) DDD per quei concetti complessi 2) script di transazione per quelle cose semplici. È accettabile?
Oltre al pensiero sopra menzionato, ho anche pensato di suddividerli in più contesti limitati. Ma sono preoccupato di come combinare i dati in due contesti limitati in uno nella fase di interrogazione. Nel caso di un utente che sta interrogando un altro utente, desidera vedere tutte le cose relative a quell'utente. In termini di api riposante, l'utente desidera vedere:
{
"userId": 12, //from ddd
"Name": "Somebody", //from ddd
"IsFriend": true, //from ddd
"IsImportant": true, //from transaction script
"Blocked": false //from transaction script
}
Ma dato che DDD di solito suggerisce ogni contesto limitato dovrebbe avere il proprio database ed è meglio non condividere un database. Posso fare compromessi per condividere database solo allo scopo di interrogare (non scrivere), ma non sono ancora sicuro se potrebbero esserci problemi che non posso prevedere in questo momento.
Mi piacerebbe sentire opinioni e suggerimenti. Grazie in anticipo.