Domanda

Sto refactoring di un progetto usando DDD, ma sono preoccupato di non rendere troppe entità la propria radice aggregata.

Ho un Store, che ha un elenco di ProductOptions e un elenco di ProductS. UN ProductOption può essere usato da diversi ProductS. Queste entità sembrano adattarsi al Store aggrega abbastanza bene.

Allora ho un Order, che usa transitoriamente a Product per costruire il suo OrderLineS:

class Order {
    // ...
    public function addOrderLine(Product $product, $quantity) {
        $orderLine = new OrderLine($product, $quantity);
        $this->orderLines->add($orderLine);
    }
}

class OrderLine {
    // ...
    public function __construct(Product $product, $quantity) {
        $this->productName = $product->getName();
        $this->basePrice = $product->getPrice();
        $this->quantity = $quantity;
    }
}

Per ora sembra, le regole DDD sono rispettate. Ma vorrei aggiungere un requisito, che potrebbe infrangere le regole dell'aggregato: il proprietario del negozio a volte dovrà controllare le statistiche sugli ordini che includevano un determinato prodotto.

Ciò significa che fondamentalmente, dovremmo mantenere un riferimento al prodotto nella linea di ordine, ma questo lo farebbe mai essere utilizzato con qualsiasi metodo all'interno dell'entità. Utilizzeremmo queste informazioni solo a scopo di reporting, durante l'interrogazione del database; Quindi non sarebbe possibile "rompere" qualsiasi cosa all'interno dell'aggregato del negozio a causa di questo riferimento interno:

class OrderLine {
    // ...
    public function __construct(Product $product, $quantity) {
        $this->productName = $product->getName();
        $this->basePrice = $product->getPrice();
        $this->quantity = $quantity;

        // store this information, but don't use it in any method
        $this->product = $product;
    }
}

Questo semplice requisito impone che il prodotto diventi una radice aggregata? Ciò sarebbe anche in cascata per il prodotto che diventa una radice aggregata, poiché il prodotto ha un riferimento ad esso, risultando così in due aggregati che non hanno alcun significato al di fuori di un negozio e non avranno bisogno di alcun repository; Mi sembra strano.

Qualsiasi commento è il benvenuto!

Nessuna soluzione corretta

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