2 Stimmen

Aggregate, Repositories und eine Dienstebene

Nehmen Sie eine Klasse, die mit mehreren anderen Klassen in Verbindung steht. Die erste Klasse kann als das Aggregat (Root) betrachtet werden. Wie würde man die Aufrufe aus Sicht der Diensteschicht am besten aufteilen?

  1. Rufen Sie das Repository des Aggregats für den gesamten Objektgraphen auf und rufen Sie von diesem speziellen Repository aus andere Repositories auf, um die Speicherung der Beziehungen zu übernehmen (ein Repository pro Klassentyp).
  2. Rufen Sie das Repository des Aggregats für den gesamten Objektgraphen auf und behandeln Sie alles in dieser einen Methode (so dass alle Beziehungen in derselben Methode gespeichert werden).
  3. Rufen Sie aus der Serviceschicht heraus die Repositories für das Aggregat auf, und rufen Sie direkt danach, wiederum aus der Serviceschicht heraus, die Repositories der zugehörigen Klassen auf.
  4. Fügen Sie eine zusätzliche Schicht zwischen dem Dienst und den Repositories ein und gehen Sie innerhalb dieser zusätzlichen Schicht vor wie in Option 3.

Ich habe bereits alle 3 möglichen Lösungen im Produktionscode gesehen, aber ich bin an der saubersten Lösung und einer Begründung interessiert, warum man sich für diesen Ansatz entscheiden würde.

0voto

Fredrik Mörk Punkte 151006

Für mich wäre es eine Entscheidung zwischen Option 1 und 2 (ich möchte die "obere Dienstschicht" so einfach wie möglich halten).

Welche davon ich wählen würde, würde ein wenig davon abhängen, wie die einzelnen Arten des Aggregats verwendet werden; wenn sie immer (zumindest derzeit) als Teil dieses einen Aggregats und nicht eigenständig verwendet werden, würde ich wahrscheinlich das Aggregat-Repository auch mit ihnen umgehen lassen (aber vielleicht immer noch in separaten Methoden), aber wenn die einzelnen Teile auch eigenständig verwendet werden können (oder als Teile anderer Aggregate), würde ich wahrscheinlich dazu tendieren, separate Repository-Objekte für sie zu haben und diese Repositories vom Aggregat-Repository aus aufzurufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X