Question

Je regarde DDD et j'ai quelques réflexions. Sur un site commercial je l'Ordre typique.

public class Order
{
    public ICollection<OrderRow> OrderRows { get; set; }
    public ICollection<Payment> Payments { get; set; }
    ...
}

Les paiements semblent être naturel de mettre à l'ordre. Lorsque vous passez une commande ou travailler avec l'ordre, les paiements est une partie de l'ordre.

Mais plus tard un administrateur veut traiter les paiements séparément. Par exemple. dans l'interface d'administration ont la liste des paiements qui doit être traité.

Comment dois-je faire? Les paiements devraient-ils être retirés de l'ordre et être son propre agrégat de racine?

Était-ce utile?

La solution

Ma compréhension est que les agrégats peuvent et se chevauchent, ce qui vous permet de définir l'ensemble qui fait le plus de sens pour le contexte commercial de l'opération en cours.

Donc, dans ce cas, oui, lorsque vous travaillez en termes de commande que vous exposer les paiements dans le cadre de l'ensemble des commandes, mais cela ne vous empêche pas d'avoir aussi un PaymentRepository dédié qui expose paiement une racine globale.

Autres conseils

Je pense que l'entité de paiement ne appartiennent à total Ordre. Comme vous l'avez écrit vous avez la fonctionnalité qui fonctionne avec les paiements séparément. Cela signifie que les paiements ne sont pas utilisés que dans le contexte Ordre. Cela signifie que les paiements ne le fait pas appartiennent à l 'ensemble :).
Cependant, il est possible d'avoir des biens de paiements en ordre de classe, même si elle ne fait pas partie de l'agrégat Ordre.

Si un paiement ne peut exister sans ordonnance alors le paiement n'est pas une racine globale.

Si ce n'est pas une racine globale chargement puis l'ordre approprié des objets à partir d'un OrderRepository et d'exploitation sur les entités de paiement à l'intérieur semblent avoir le plus l'intégrité de DDD.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top