Caricamento radice aggregata dal database con convalide

1

Here is a similar question Where to validate domain model rules that depend on database content?

Sto facendo questa nuova domanda perché ho più descrizioni e non voglio cambiare la domanda precedente menzionata sopra

Problema

Ho una radice aggregata del modulo con raccolta Campi. Sul mio modulo ho il metodo SetCustomField (fieldname, value). Ho anche proprietà predefinite nel modulo, ad es. DateOfBirth, FirstName e LastName.

public DateTime DateOfBirth
{
   get { return _dob; }
   set { 
      if(value > 2000) 
         throw new ArgumentException(null, "You must be 15 yrs old or more");
      _dob = value;
   }
}

Funziona quando si crea il modulo. Ma quando vuoi modificare o visualizzare il modulo, interviene anche la validazione. Ciò genera un'eccezione per i campi vuoti o con valori non validi, eventualmente modificati nel db o caricati da Excel. Il comportamento previsto è consentire la visualizzazione del modulo all'aggiornamento, in modo che l'amministratore possa correggere tali campi.

CQRS

Ho letto di CQRS ma finora non penso che risolverebbe questo problema. Se voglio modificare il modulo, la radice aggregata del modulo deve ancora essere caricata, modificata e aggiornata:

//repository needs to set the DateOfBirth here and throws exception
var form = repo.GetFormById(1); 
form.DateOfBirth = "Some value";
repo.Save(form);

Poiché ho bisogno di ricostruire il modello, il modello di lettura CQRS potrebbe non essere di aiuto. Se devo usare CQRS, come ricostruiresti una radice di aggregazione dal modello di lettura?

Grazie per il tuo contributo.

    
posta tunmise fasipe 10.07.2015 - 18:01
fonte

1 risposta

2

CQRS risolve sicuramente un problema: separa i modelli di dominio dai modelli letti. Quindi con CQRS correttamente implementato non si verrebbero a creare questo tipo di problemi e i modelli di dominio si concentrerebbero sulla logica aziendale, non sulla lettura dei risultati.

how would you reconstruct an Aggregate Root from the Read-Model?

Non lo fai; usi solo gli id dal tuo lato di lettura per ottenere il modello di dominio con lo stesso id dal tuo comando.

    
risposta data 08.09.2015 - 21:11
fonte