DDD Best practice per la convalida: l'entità contenente i dati non ha il contesto da convalidare prima che i dati vengano impostati. Dove dovrebbe essere la funzione essere?

3

Sono abbastanza nuovo per DDD, quindi abbi pazienza con me.

Ho una chat room e persone nella chat room. Le persone nella chat room devono proporre una data in cui desidererebbero un webinar. abbiamo una regola di bussiness, in cui abbiamo bisogno di avere almeno 3 persone nel webinar per il webinar e ogni persona interessata al webinar deve dire che è pronta per qualcuno a proporre una data

Ho in mente 2 soluzioni

soluzione 1:

Rendere la chat room la radice aggregata

Avere una funzione di proporre la data nella chat room, ProposeDate (Person, Date).

In questa soluzione vorrei convalidare le regole di bussiness nella chat room e impostare la data sull'entità persona.

Un problema Con questa soluzione è che abbiamo un setter sull'entità persona che può essere chiamato da qualsiasi parte nel dominio senza il riferimento alla convalida nella chat room, se la data proposta per ogni persona viene effettivamente rimossa dall'entità persona e impostata sulla chat room stessa in modo che non possa essere impostata senza chiamare l'entità della chat room?

soluzione 2

Rendi persona la radice aggregata

On Person have ProposeDate (Date) .e person chiede a Chat room posso proporre questa data. Il problema che ho con questa soluzione è che credo invalida il tell non chiedere principio.

Se ho sbagliato tutto e c'è un'altra soluzione per favore fammelo sapere.

Le persone devono proporre / accettare / rifiutare le date l'una con l'altra.

    
posta t l 06.02.2015 - 03:28
fonte

1 risposta

3

Quando si ha una situazione come questa in cui due oggetti sembrano interdipendenti, a volte la soluzione consiste nel rifattorizzare una dipendenza in un terzo oggetto. In questo caso, perché non hai WebinarVote oggetto con propose(ChatRoom, Person) metodo?

Una volta terminato il periodo di votazione, il tuo oggetto di servizio Webinar (o qualunque cosa viene chiamata ora nella tua architettura) eseguirà iterazione di WebinarVotes per determinare quali webinar avvengono e quali no.

    
risposta data 13.02.2015 - 08:07
fonte

Leggi altre domande sui tag