Penso che avete bisogno di guardare ai confini aggregati e gli enti come qualcosa di più di una gerarchia. Le probabilità sono, avrai un modello più ricco di quello.
Il primo modo per sapere se il vostro aggregato è giusto, è che si può guardare in ciascuna delle entità all'interno di esso e chiedere: "Questo bisogno di accedere direttamente?" Se rispondi sì, allora quell'entità probabilmente non fa parte dell'aggregato.
Senza sapere di più sul tuo dominio, posso presumere che lo Store sia effettivamente un aggregato. Le vendite, d'altra parte, sono più complesse. Sì, le vendite si verificano in un negozio, ma hai bisogno di cercare di utilizzare una vendita in modo indipendente? Se ne hai bisogno al di fuori dello scopo di lavorare solo con un negozio, le vendite sono probabilmente al di fuori di tale aggregato.
sto immaginando che entrambi gli stili e colori sono immutabili e ripetibile, in modo che sarebbe probabilmente oggetti di valore in questo caso. Le Zone sono uniche per un negozio o variano?
Personalmente, trovo il valore per identificare tutti gli elementi nel dominio su carta (o lavagna). Passerò attraverso una fase di scoperta con gli stakeholder e li porteremo là fuori. Quindi, usa queste parole come leader nella conversazione, cercando di capire come si relazionano. Se intervisti lo stakeholder abbastanza bene, la descrizione che lui/lei dà in realtà definirà la maggior parte di ciò che stai cercando.
Non per battere un cavallo morto, ma il libro di Evans merita sicuramente di essere letto/letto. È un po 'secco, ma molto perspicace. Per un rapido avvio, puoi leggere lo free book su InfoQ che è fondamentalmente un riassunto del libro di Evans.
fonte
2009-10-28 20:22:15
Sì, vorrei accedere direttamente anche alle vendite, probabilmente semplicemente passando lo StoreId. Immagino che creerei un SaleRepository in quel caso? Le zone variano a seconda del negozio.Ogni negozio può avere una quantità x di zone separate. Creerei anche un ZoneRepository qui? Ho ordinato un libro di evans, tuttavia inizierei già a ricercare il mio dominio. Per favore fatemi sapere se avete bisogno di altre informazioni. Più conoscenza riuscirò a capire meglio capirò DDD. Grazie ancora. – vikasde
I confini aggregati sono probabilmente la cosa più difficile nella DDD, secondo me. Se stai cercando di passare un identificatore di negozio in un deposito di vendite proposto, ci sono due possibilità che sono immediate. In primo luogo sarebbe che le vendite potrebbero essere parte dell'aggregazione del negozio che hai menzionato. L'altro potrebbe essere che uno Store potrebbe essere parte di un aggregato di vendite. L'unico modo in cui sarebbero in realtà entrambi gli aggregati sarebbe se fosse necessario accedere a entrambi in modo indipendente e senza che essi richiedano una conoscenza diretta l'uno dell'altro. Nota che non ti impedisce di ... –
... con un riferimento a un'altra radice aggregata. Ad esempio, se si è determinato che sia Store sia Sales sono root aggregati, nulla impedisce a una Sale di avere un riferimento a un identificativo Store, che può quindi essere utilizzato per chiamare il repository Store per ottenere lo Store quando è necessario. Per quanto riguarda le Zone, esiste una relazione definita con lo Store. Ciò rafforza il fatto che Store * è * una radice aggregata e Zone è un'entità (dal momento che non sono necessariamente immutabili nel contesto che hai descritto). Quindi, al momento, siamo sicuri che Store sia un aggregato, contenente zone ... –