8
votes

Agrégats DDD et objets de valeur

J'aimerais poser une question sur les fonctionnalités DDD. Disons que nous avons deux agrégats et chacun d'entre eux contient une adresse de valeur-objet. En conséquence, Eric Evans DDD, nous devrions isoler les agrégats les uns des autres, afin que la racine d'agrégation du premier agrégat ne puisse avoir un lien vers l'adresse. Franchement, cela ne semble pas avoir de sens pour moi, alors question est de savoir comment résoudre une telle situation? Quel agrégat doit contenir une adresse?

merci


0 commentaires

3 Réponses :


14
votes

Vous pouvez l'avoir à l'aide d'un même objet de valeur. Mais ne faites que cela si les racines globales existent dans le même contexte délimitée et ont donc la même signification pour les agrégats. Si les agrégats existent dans différents contextes délimités, présentez-en 2 et en double. Les préoccupations d'un contexte délimitée à un autre sont ce que ERIC essaie de se battre.

Pour la plupart, les préoccupations de l'entité contre l'objet de valeur bouchent aux personnes ayant des problèmes de duplication des données. Nous avons été tellement formés pour penser à la 3ème forme normale d'un seul modèle canonique. DDD lutte à la complexité inévitable que cela apporte en forçant les doubles emplois où il est nécessaire et permettant aux concepts qui étaient autrefois pensés être un à plusieurs.

J'espère que cela aide


2 commentaires

Pourriez-vous s'il vous plaît donner un exemple de contextes bornés et sans bornes? Pour une meilleure compréhension.


Si vous avez un contexte délimité de commande et un contexte délimité par le client, vous souhaitez avoir des adresses indépendantes. Le client et la commande sont dans des contextes séparés. Si vous avez des informations de commande et d'expédition ARS, ils sont dans le même contexte et vous pouvez utiliser le même objet de valeur d'adresses.



10
votes

Un objet de valeur est un objet qui décrit certaines caractéristiques ou attribut mais ne porte aucun concept d'identité.

Étant donné qu'il n'a pas d'identité conceptuelle, vous ne pouvez pas "faire référence" ou "en avoir un lien". Vous ne pouvez "contenir" que. Disons que vous avez un utilisateur et un utilisateur a l'âge. L'âge est un objet de valeur. Si John est âgé de 25 ans et que Jane est également 25, ils ne font pas référence au même âge. L'âge de Jonh est simplement égal à l'âge de Jane. Donc, si votre adresse est en effet un objet de valeur, vous ne violez aucune limite globale. Vos racines agrégées ont simplement des adresses égales. Même si vous avez techniquement une référence Java / C # à l'adresse, cela n'a pas d'importance car l'objet de valeur est immuable la plupart du temps.

Il est difficile de répondre à votre question sans savoir quel domaine vous travaillez. Mais généralement, l'adresse ne doit pas nécessairement être un objet de valeur. Eric Evans mentionne dans son Book ce service postal et Les domaines de la route de livraison traiteront l'adresse en tant qu'entité. La société électrique qui envoie des techniciens a besoin de réaliser que deux appels de service de «123 elm St 'proviennent réellement de la même adresse et il n'a besoin que d'envoyer un technicien. Adresse ou «logement» est une entité dans ce cas.


0 commentaires

5
votes

Les agrégats ne sont concernés que par modification de données forte>. Aucun total de deux agrégats ne doit être autorisé à modifier les mêmes données. Étant donné qu'un objet de valeur est immuable, cela empêche ce scénario de se produire de jamais. Par conséquent, il est totalement bien pour deux agrégats ou plus de partager l'objet de la même valeur que la seule structure de données en lecture seule et un agrégat ne se soucie pas du modèle de lecture.

Address
{
    Number;
    Unit;
    Latitude;
    Longitude;
}


0 commentaires