Frage

Ich versuche, meinen Kopf herum, wie man richtig das Repository-Muster verwenden. Das zentrale Konzept eines Aggregates Wurzel kommt immer wieder auf. Wenn sowohl die Web-und Stack-Überlauf der Suche nach Hilfe mit dem, was ein Aggregat Wurzel ist, halte ich Diskussionen über sie und tote Links zu Seiten zu finden, die angeblich Definitionen Basis enthalten.

Im Rahmen der Repository-Muster, Was ist ein Aggregat Wurzel?

War es hilfreich?

Lösung

Im Rahmen des Repository-Muster, zu aggregieren Wurzeln sind die einzigen Objekte Ihre Kundennummer Lasten aus dem Repository.

Das Repository kapselt den Zugriff auf untergeordnete Objekte -. Aus der Sicht des Anrufers automatisch lädt sie, entweder in der gleichen Zeit ist die Wurzel geladen oder, wenn sie tatsächlich benötigt werden (wie bei lazy loading)

Zum Beispiel könnten Sie ein Order Objekt haben, die Operationen an mehreren LineItem Objekte kapselt. Ihr Client-Code würde nie die LineItem laden Objekte direkt, sondern nur die Order, das sie enthält, die das Aggregat Wurzel für den Teil Ihrer Domain sein würde.

Andere Tipps

Von Evans DDD:

  

Ein Aggregat ist eine Gruppe von zugehörigen Objekten, die wir als eine Einheit zum Zweck der Datenänderungen zu behandeln. Jedes AGGREGAT hat eine Wurzel und eine Grenze. Die Grenze definiert, was im Inneren des AGGREGATE ist. Die Wurzel ist ein einzelner, spezifischer ENTITY im AGGREGATE enthalten ist.

Und:

  

Die Wurzel ist das einzige Mitglied des Aggregates, dass außerhalb Gegenstände halten Verweise auf dürfen [.]

Das bedeutet, dass Aggregat Wurzeln sind die Objekte nur, dass aus einem Repository geladen werden.

Ein Beispiel ist ein Modell, eine Customer Einheit und eine Address Einheit enthält. Wir würden nie eine Address Einheit aus dem Modell direkt zugreifen, wie es sinnvoll, nicht ohne den Kontext eines zugehörigen Customer. So wir, dass Customer und Address zusammen ein Aggregat bilden und dass Customer ein Aggregat Wurzel sagen können.

Aggregate Wurzel ist ein komplexer Name für eine einfache Idee.


Allgemeine Idee

Gut gestaltete Klassendiagramm kapselt seine Einbauten. Punkt, durch die man diese Struktur zugreifen heißt aggregate root.

 image description hier

eingeben

Internals Ihrer Lösung kann sehr kompliziert, aber Benutzer dieser Hierarchie wird nur root.doSomethingWhichHasBusinessMeaning() verwenden.


Beispiel

Überprüfen Sie diese einfache Klassenhierarchie eingeben Bild Beschreibung hier

Wie wollen Sie Ihr Auto fahren? Wählen Sie besser api

Option A (es nur irgendwie funktioniert):

car.ride();

Option B (Benutzer hat Zugriff auf Klasse inernals):

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

Wenn Sie diese Option A denken ist besser, dann herzlichen Glückwunsch. Sie erhalten Hauptgrund für aggregate root.


Aggregate Wurzel kapselt mehrere Klassen. Sie kann nur durch Hauptobjekt ganze Hierarchie bearbeiten.

Stellen Sie sich einen Computer-Einheit haben, diese Einheit kann auch nicht leben, ohne seine Software-Einheit und Hardware Einheit. Diese bilden das Computer Aggregat, das Mini-Ökosystem für den Computer-Teil der Domäne.

Aggregate Root ist die Mutter Einheit innerhalb des Aggregats (in unserem Fall Computer), ist es eine gängige Praxis ist das Repository nur die Arbeit mit den Einheiten zu haben, die Aggregate Wurzeln sind, und diese Einheit ist verantwortlich für die anderen Einheiten zu initialisieren.

Betrachten Aggregate Wurzel als Einstiegspunkt zu einem Aggregat.

In C # -Code:

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 {}

Beachten Sie, dass Hardware wahrscheinlich ein ValueObject sein würde (haben keine Identität auf eigene), betrachten es nur als Beispiel.

Wenn Sie einen Datenbank-First-Ansatz folgen, Sie Aggregat Wurzel ist in der Regel die Tabelle auf der Seite 1 eine 1-Beziehung.

Das gängigste Beispiel einer Person zu sein. Jeder Mensch hat viele Adressen, eine oder mehrere Gehaltsabrechnungen, Rechnungen, CRM-Einträge, etc. Es ist nicht immer der Fall, aber 9/10 mal es ist.

Wir arbeiten derzeit an einer E-Commerce-Plattform, und wir haben im Grunde zwei Aggregate Wurzeln:

  1. Kunden
  2. Verkäufer

Kunden, Kontaktdaten, Informationen, wir assign Transaktionen zu ihnen Transaktionen Positionen bekommen, etc.

Verkäufer verkaufen Produkte, haben Ansprechpartner, über uns Seiten, Sonderangebote, etc.

Diese Betreuung von jeweils durch die Kunden und Verkäufer Repository genommen werden.

Aus Defekten Link :

Innerhalb eines Aggregats gibt es ein Aggregat Wurzel. Die Aggregate Root ist die übergeordnete Entität für alle anderen Entitäten und Wertobjekte innerhalb der Aggregate.

Ein Repository arbeitet auf ein Aggregat Wurzel.

Weitere Informationen können auch hier .

Dinah:

Im Kontext eines Repository der Aggregate Root ist eine Entity ohne Mutter Entity. Es enthält Null, ein oder mehr untergeordneten Entitäten, deren Existenz hängt von den Eltern für seine Identität. Das ist ein one to many Beziehung in einem Repository. Diese Kinder Entities sind einfache Aggregate.

 image description hier

eingeben

Aggregate Mittel Sammlung von etwas.
root ist wie oben Knoten des Baumes, von wo aus wir alles wie <html> Knoten in Web-Seiten-Dokument zugreifen können.
Blog Analogy kann ein Benutzer viele Beiträge haben und jeder Beitrag kann viele Kommentare haben. so, wenn wir jeden Benutzer holen, dann kann es wirken als root , um den Zugang aller verwandten Beiträge und weitere Kommentare dieser Beiträge. Diese sollen alle zusammen Sammlung sein oder aggregierte

Aggregate sind, wo Sie Ihre Invarianten und Kraft Konsistenz Schutz durch Begrenzung seines Zugang dachte Aggregat Wurzel. Vergessen Sie nicht, Aggregat sollte entwerfen auf Ihr Projekt Geschäftsregeln und Invarianten nicht Datenbank-Beziehung. Sie sollten nicht inject jede Repository und keine Abfragen sind nicht erlaubt.

In Erlang besteht keine Notwendigkeit, zwischen den Aggregaten zu unterscheiden, sobald das Aggregat von Datenstrukturen innerhalb des Staates besteht, statt OO Zusammensetzung. Sehen Sie ein Beispiel: https://github.com/bryanhunter/cqrs-with -erlang / Baum / NDC-london

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top