Domanda

Attualmente sto lavorando molto con DDD e sto affrontando un problema durante il caricamento/opera su radici aggregate da altre radici aggregate.

Per ogni radice aggregata nel mio modello, ho anche un repository. Il repository è responsabile della gestione delle operazioni di persistenza per la radice.

Diciamo che ho due radici aggregate, con alcuni membri (entità e oggetti di valore).

Aggregatereot1 e aggregateroot2.

Aggregatereot1 ha un membro dell'entità a cui fa riferimento ad Aggregatereot2.

  1. Quando carico aggregateroot1, dovrei caricare anche aggregateroot2?
  2. Il repository per aggregateroot2 dovrebbe essere responsabile di questo?
  3. In tal caso, va bene per l'entità di Aggregatereot1 chiamare il repository di Aggregatereot2 per il caricamento?

Inoltre, quando creo un'associazione tra l'entità in Aggregatereot1 ad Aggregateroot2, dovrebbe essere fatto attraverso l'entità o attraverso il repository per aggregateroot2?

Spero che la mia domanda abbia senso.

MODIFICARE

Soluzione attuale

Con l'aiuto di Twith2sugars Ho escogitato la seguente soluzione:

Come descritto nella domanda, una radice aggregata può avere figli che hanno riferimenti ad altre radici. Quando si assegnano Root2 a uno dei membri di Root1, il repository per root1 sarà responsabile del rilevamento di questa modifica e della delegarlo al repository per root2.

public void SomeMethod()
{
    AggregateRoot1 root1 = AggregateRoot1Repository.GetById("someIdentification");
    root1.EntityMember1.AggregateRoot2 = new AggregateRoot2();
    AggregateRoot1Repository.Update(root1);
}

public class AggregateRoot1Repository
{
    public static void Update(AggregateRoot1 root1)
    {
        //Implement some mechanism to detect changes to referenced roots
        AggregateRoot2Repository.HandleReference(root1.EntityMember1, root1.EntityMember1.AggregateRoot2)
    }
}

Questo è solo un semplice esempio, nessuna legge di Demeter o altri migliori principi/pratiche incluse :-)

Ulteriori commenti apprezzati.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top