Ich habe kürzlich das Repository-Muster als eine Möglichkeit betrachtet, alle Details der Persistenz unter dem Teppich, wo der Client-Code betroffen ist, zu putzen. Beim Lesen scheint es, dass ein Repository für Aggregate und nicht nur für einfache Klassen verantwortlich ist.Aggregate und Repository. Wie man Aggregate bestimmt?
Dieser macht Sinn für mich, wie Sie eine Klasse Beiträge haben könnten und eine andere Definition von Kommentaren definieren. Dies ist ein idealer Kandidat für ein Aggregat, da beide sehr eng verwandt sind. Wie aber würde ich eine Benutzer Klasse und ihre Beziehung zu seiner Beiträge darstellen?
Wäre es sinnvoll, zu aggregieren Benutzer mit den Beiträge/Kommentare Aggregat machen, oder Benutzer für sich behalten und einfach eine Verbindung über eine gute altmodische Referenz haben?
Ich habe versucht, die Antwort selbst suchen mit Google, aber viele der Beispiele, die ich finde, sind nur Stand-alone. dh Posts/Comment oder vielleicht Order und OrderLine etc. Ich kann nichts finden, das zeigt, wie andere verwandte Klassen zusammenpassen.
Ich verwende das nicht auf etwas Bestimmtes, obwohl PHP oder Java/C# wahrscheinlich der Bereich wäre, den ich mit diesen Ideen betrachten würde. Auf jeden Fall erkunde ich nur und versuche, einige dieser Ideen und Konzepte zu verstehen, bevor ich losrenne und ein Monster erschaffe. :)
Vielen Dank für Ihre Zeit.
Ah ich verstehe. Wenn ein Objekt vollständig von einem anderen abhängig ist, ist es sinnvoll, sie zu aggregieren. So können Kommentare ohne Beiträge nicht existieren. Obwohl ich denke, dass du an einigen Stellen die Linie zeichnen musst - das Löschen eines Users sollte nicht notwendigerweise bedeuten, dass ihre Posts/Kommentare verschwinden, und selbst wenn sie es taten, macht es mehr Sinn, Benutzer als separate Entity zu haben. Als kleine Nebenbemerkung, wo ist der logische Ort, um die eigentliche SQL für die Abfrage der Datenbank [oder welchen Mechanismus ich für die Persistenz verwenden] setzen? Wäre es im Repository oder in den Aggregaten ... oder noch tiefer?Danke für Ihre Hilfe! – Etzeitet
Sie haben es verstanden. Das Repository * verhält sich * wie eine speicherinterne Auflistung, ist jedoch so implementiert, dass es zu Ihrem Datenspeicher geleitet wird. Dies bedeutet, dass die Schnittstelle des Repositorys SQL oder Datenzugriff nicht erwähnt, aber die Implementierung, dh Ihre Abstraktion. –