Allo scopo di separare funzionalità diverse in classi diverse, ho due seguenti aggregati:
-
ActiveEmployee
- AssignTask ()
- ReassignManager ()
- Disattiva (motivo stringa)
-
InactiveEmployee
- GetReasonForDeactivation ()
- Reinstate ()
Entrambi gli aggregati condividono la stessa radice, dbo.Employee.
Server EmployeeID come chiave primaria per entrambi Aggregati.
Il repository crea un'istanza del primo o il secondo basato su un flag booleano dbo.Employee.IsActive.
Poiché seguo la regola secondo cui solo un aggregato può essere modificato in una transazione, non troverò mai una situazione in cui carico entrambi gli aggregati con lo stesso ID, finendo con InactiveEmployee con ID 3 e ActiveEmployee con ID 3 nella stessa transazione.
Questo buon DDD? DDD consente di avere due aggregati con la stessa radice? Possiamo differenziare i tipi di aggregati in base a un flag?
UPDATE 1:
Quando ho detto che entrambi gli aggregati condividono la stessa radice, volevo dire che entrambi gli aggregati rappresentano una riga nella tabella dbo.Employee.
A mio avviso, una radice di Aggregate è l'entità definita in modo univoco nel nostro dominio. Ciò non significa che quell'entità debba esistere come una vera classe, l'identità è ciò che conta. Ogni altro aggregato che vuole fare riferimento a Inactive / ActiveEmployee conserverà un riferimento a EmployeeID, non il riferimento all'istanza dell'oggetto.