2012-11-22 7 views
6

Angenommen, Sie haben zwei Aggregate in Ihrem beschränkten Kontext, die untereinander einige Einschränkungen haben. Unter Verwendung von DDD können diese Inter-Aggregat-Constraints nicht in derselben Transaktion erzwungen werden, d.h. die Aggregatgrenzen sind Transaktionsgrenzen.Eventuelle Konsistenz über Aggregatwurzeln im selben beschränkten Kontext mit einem Prozessmanager alias saga

Würden Sie in Betracht ziehen, was in der Microsoft CQRS-Reise als "Prozessmanager" zum Koordinieren von zwei Aggregaten im selben beschränkten Kontext oder als Prozessmanager nur zum Koordinieren zwischen zwei beschränkten Kontexten verwendet wird? Was wäre das Äquivalent eines Prozessmanagers, der zwei oder mehr Aggregatwurzeln im selben beschränkten Kontext koordiniert?

Antwort

9

Ein Aggregat root definiert standardmäßig einen beschränkten Kontext, wenn auch einen niedrigeren Level (btw der niedrigste beschränkte Kontext, den Sie finden können, ist ein Objekt, ein beliebiges Objekt). Der Prozessmanager ist der Name, den sie anstelle einer Saga verwendet haben, wahrscheinlich können Sie auch andere Namen finden, es spielt keine Rolle, sie haben alle denselben Zweck.

Und ja, würde ich in Betracht ziehen, eine Saga zu verwenden, um schließlich Konsistenz zu erreichen. In der Tat, ich denke, das ist der beste Weg und das ist genau das, was ich in meinen eigenen Apps mache. Wie auch immer, ich benutze eine Message-Driven-Architektur (ja, in einer lokalen, nicht verteilten Anwendung) und ich habe automatisch Saga-Unterstützung über den Service-Bus (meine eigene, noch nicht freigegeben).

Was im Zusammenhang mit eventueller Konsistenz wichtig ist, ist, überall Idempotenz zu gewährleisten. Das heißt, die aggregierten Roots sollten eine doppelte Operation ablehnen, und natürlich sollte der Event-Handler in der Lage sein, mit der Tatsache umzugehen, dass dasselbe Ereignis mehr als einmal veröffentlicht werden kann. Beachten Sie jedoch, dass Sie keine hundertprozentige Idempotenz garantieren können, aber Sie können sehr nahe kommen.

+1

+1. Gute Antwort. Ich würde nicht so weit gehen zu sagen, dass ein AR selbst eine BC definiert, aber völlig mit allem anderen übereinstimmt. –

+2

Dies ist eine gute Antwort, aber überspitzt einen Punkt. Nur um zu verdeutlichen: Ein begrenzter Kontext ist eine _Modell_Begrenzung, keine Aggregat- oder Objektgrenze (vgl. Seite 8 der [DDD-Referenz] (http://domainlanguage.com/ddd/patterns/DDD_Reference_2011-01-31.pdf) Das Zusammenfassen von Aggregat und Objekt mit begrenztem Kontext ist zu reduktionistisch Ein Modell in einem beschränkten Kontext besteht typischerweise aus mehreren Aggregaten –

+2

Sowohl ein Objekt als auch ein Aggregatstamm (als Fassade eines Aggregats) definieren explizite Grenzen für ein * some * -Modell Jedes BC ist nur eine Gruppe kleinerer BCs, ich weiß, dass es BC um BC auf höherer Ebene geht, aber selbst das niedrige Objekt stimmt mit der Definition des beschränkten Kontextes überein. Dies beweist nur, dass das Konzept von DDD sogar im Object level.Vielleicht ist das der Grund, warum einige Leute sagen, dass DDD nur OOP richtig gemacht wurde. – MikeSW

Verwandte Themen