Determinazione degli aggregati in questo dominio

1

Sto lavorando a un sistema di ordinamento in cui riceviamo file delimitati da tabulazioni come questo (ho rimosso la maggior parte delle colonne per maggiore chiarezza):

      OrderId   OrderLineId    BuyerName   BuyerAdress   RecipientName     RecipientAdress

         1            1         John        123, Street      Doe              25, street
         1            2         John        123, Street      Doe              25, street
         1            3         John        123, Street     Michael           11, France
         2            1         Sam         66,Somewhere     Lily             25, Poland
         2            2         Sam         66,Somewhere     Dave             25, Russia
         ...

Applicando DDD ho estratto principalmente alcune entità come mostrato nell'immagine qui sotto:

Alcuni dati sui dati ricevuti nei file:

  1. Un ordine deve avere un acquirente e un acquirente deve avere un ordine .
  2. Un ordine contiene almeno 1 OrderLine e ogni OrderLine deve appartenere a un ordine .
  3. Ogni OrderLine deve avere un Destinatario e ogni Destinatario deve avere OrderLine associato
  4. .
  5. La cronologia dello stato per OrderLine deve essere monitorata dal sistema (da cui l'entità Cronologia linee

Domande:

  1. Quale entità è la radice aggregata ? La maggior parte degli articoli che ho letto su DDD metterebbe l'entità Cliente come propria radice aggregata e l'Ordine con i suoi OrderLines come l'altra radice. Tuttavia, poiché l'acquirente e il destinatario possono NOT esistere da soli, come possono essere trattati come la propria radice aggregata?
  2. Le righe dell'ordine dovrebbero essere un oggetto valore o un'entità? Ho visto alcune risposte su numerosi blog che suggeriscono che OrderLines dovrebbe essere un VO, ma non vedo perché non dovrebbe essere trattato come un'entità dal momento che la sua identità sarà necessaria nella sua relazione con l'entità Storia.
  3. Allo stesso modo, la Cronologia linee dovrebbe essere modellata come oggetto entità o valore
posta Songo 29.07.2013 - 10:15
fonte

2 risposte

2

Penso che tu abbia perso una cosa in DDD. E questa è la relazione tra le entità è costosa e dovresti pensarci due volte prima di aggiungerla. Aggiungete solo la relazione dell'entità se è completamente necessaria. Nel tuo caso, l'Acquirente non ha bisogno di avere elenchi dei suoi ordini. E non è necessario che il destinatario abbia un elenco di righe di ordine. Non è necessario che esistano all'interno delle entità, ma dovrebbero invece essere modellate all'interno del repository. In questo modo puoi ottenere gli ordini di determinate linee di acquirente e ordine di un determinato destinatario.

Inoltre, ci possono essere tante radici aggregate quante sono le entità nella progettazione. Da nessuna parte si dice che abbia un'unica radice aggregata nell'intero progetto.

Se seguo la mia logica, allora ci sono 3 aggregati e radici nel tuo progetto: Acquirente, Destinatario e Ordine con linee d'ordine e cronologia delle linee.

2 e 3: Sì, è logico che le righe di ordine siano entità grazie alla relazione con la loro storia. Ma penso che dovrebbero ancora essere parte di un aggregato di ordini.

    
risposta data 29.07.2013 - 12:48
fonte
0

Sembra che il tuo acquirente e il destinatario siano oggetti valore in quanto non hanno identità al di fuori della relazione con una riga ordine e ordine. Direi quindi che Order è una radice aggregata e anche la cronologia degli ordini è una radice aggregata che viene aggiornata dagli eventi che avvengono all'interno dell'aggregazione dell'ordine. Lo copro nel mio libro DDD gratuito link

    
risposta data 30.07.2013 - 00:03
fonte

Leggi altre domande sui tag