Question

Je suis en train d'obtenir ma tête sur la façon d'utiliser correctement le modèle de référentiel. Le concept central d'une racine d'agrégat continue à venir. Lors de la recherche à la fois sur le Web et le débordement de pile pour l'aide à ce que une racine globale est, je continue à trouver des discussions sur les liens et les morts vers des pages qui sont censées contenir des définitions de base.

Dans le cadre du modèle référentiel, ce qui est une racine globale?

Était-ce utile?

La solution

Dans le cadre du modèle référentiel, les racines globales sont les seuls objets de vos charges de code client à partir du référentiel.

Le dépôt encapsule l'accès aux objets enfants - du point de vue de l'appelant, il les charge automatiquement, soit en même temps la racine est chargé ou quand ils sont réellement nécessaires (comme le chargement paresseux)

.

Par exemple, vous pourriez avoir un objet Order qui encapsule les opérations sur plusieurs objets LineItem. Votre code client ne serait jamais charger les objets LineItem directement, juste le Order qui les contient, ce qui serait la racine globale pour cette partie de votre domaine.

Autres conseils

De Evans DDD:

  

Agrégat est un groupe d'objets associés que nous traitons comme une unité dans le but des modifications de données. Chaque AGGREGATE a une racine et une limite. La limite définit ce qui est à l'intérieur du Aggregate. La racine est une entité unique et spécifique, contenue dans l'agrégat.

  

La racine est le seul membre de la somme qui sont autorisés des objets extérieurs pour contenir des références à [.]

Cela signifie que les racines d'agrégat sont les seuls objets qui peuvent être chargés à partir d'un référentiel.

Un exemple est un modèle contenant une entité Customer et une entité Address. Nous n'accéder à une entité Address directement à partir du modèle car il n'a pas de sens sans le contexte d'un Customer associé. Donc, on pourrait dire que Customer et Address forment ensemble un agrégat et que Customer est une racine globale.

racine globale est un nom complexe pour idée simple.


Idée générale

diagramme de classes bien conçu encapsule ses internes. Point par lequel vous accédez à cette structure est appelée aggregate root.

 ici

entrailles de votre solution peut être très compliqué, mais l'utilisateur de cette hiérarchie utiliseront simplement root.doSomethingWhichHasBusinessMeaning().


Exemple

Cochez cette hiérarchie de classe simple entrer la description d'image ici

Comment voulez-vous monter votre voiture? Choisissez une meilleure api

L'option A (juste fonctionne en quelque sorte):

car.ride();

Option B (l'utilisateur a accès à inernals de classe):

if(car.getTires().getUsageLevel()< Car.ACCEPTABLE_TIRE_USAGE)
    for (Wheel w: car:getWheels()){
        w.spin();
    }
}

Si vous pensez que l'option A vaut mieux alors félicitations. Vous obtenez principale raison derrière aggregate root.


racine globale encapsule plusieurs classes. vous pouvez manipuler toute la hiérarchie que par l'objet principal.

Imaginez que vous avez une entité informatique, cette entité ne peut pas vivre aussi sans son entité logicielle et entité matérielle. Ceux-ci forment l'agrégat Computer, le mini-écosystème pour la partie informatique du domaine.

Aggregate Racine est l'entité Mothership dans l'ensemble (dans notre cas Computer), il est une pratique courante d'avoir votre dépôt ne fonctionne avec les entités qui sont des racines en agrégats, et cette entité est responsable de l'initialisation des autres entités.

Considérez Aggregate racine un point d'entrée à un agrégat.

Dans le code C #:

public class Computer : IEntity, IAggregateRoot
{
    public Hardware Hardware { get; set; }
    public Software Software { get; set; }
}

public class Hardware : IEntity { }
public class Software : IValueObject { }

public class Repository<T> : IRepository<T> where T : IAggregateRoot {}

Gardez à l'esprit que le matériel serait probablement un ValueObject aussi (ne pas identité sur lui-même), le considérer comme un exemple.

Si vous suivez une base de données première approche, vous racine globale est généralement la table sur le 1 côté d'une relation 1-many.

L'exemple le plus commun étant une personne. Chaque personne a plusieurs adresses, un ou plusieurs bulletins de paie, les factures, les entrées de CRM, etc. Ce n'est pas toujours le cas, mais il est 9/10 fois.

Nous travaillons actuellement sur une plate-forme e-commerce, et nous avons essentiellement deux racines globales:

  1. Les clients
  2. Vendeurs

Les clients l'offre de contact, nous attribuons les transactions pour les transactions se postes, etc.

Vendeurs vendre des produits, des gens de contact, pages à propos de nous, des offres spéciales, etc.

Ceux-ci sont pris en charge par le référentiel client et le vendeur respectivement.

D'un :

Dans un agrégat il y a une racine d'agrégat. L'agrégat racine est l'entité mère à toutes les autres entités et objets de valeur au sein de l'agrégat.

A Repository agit sur une racine d'agrégat.

Plus d'informations peuvent également être trouvés ici .

Dinah:

Dans le contexte d'un dépôt de la racine globale est une entité sans entité mère. Il contient zéro, un ou plusieurs entités d'enfants dont l'existence dépend de la mère pour son identité. Voilà une question à plusieurs dans un dépôt. Ces entités enfants sont des agrégats simples.

 ici

Aggregate des moyens de collecte de quelque chose.
noeud root est comme sommet d'un arbre, d'où l'on peut accéder à tout comme nœud <html> dans le document de page Web.
Blog Analogie, Un utilisateur peut avoir plusieurs postes et chaque poste peut avoir de nombreux commentaires. donc si nous récupérons tout utilisateur, il peut agir comme root pour accéder à tous les postes concernés et d'autres commentaires de ces messages. Ceux-ci sont tous ensemble dit être collection ou Agrégé

Aggregate est l'endroit où vous protégez vos invariants et la force de cohérence en limitant son accès global pensé racine. Ne pas oublier, l'agrégat devrait concevoir sur vos règles de gestion du projet et, non invariants relation de base de données. vous ne devriez pas injecter tout dépôt et aucune requête ne sont pas autorisés.

Erlang il n'y a pas lieu de faire la différence entre les agrégats, une fois que l'agrégat est constitué par des structures de données à l'intérieur de l'état, au lieu de la composition de OO. Voir un exemple: https://github.com/bryanhunter/cqrs-with -erlang / arbre / NDC-londres

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