Ich vermute, dass Sie einen Grund haben, Artikel und Kommentar in separate Aggregatwurzeln zu teilen. Wenn ich mit einer Frage wie Ihrer konfrontiert werde, ist dies normalerweise ein Hinweis auf die Möglichkeit, das Domänenmodell zu überdenken.
Es ist nichts falsch mit der referenziellen Integritätsprüfung, aber denken Sie über die eventuelle Natur der Änderungen an den Aggregaten, die nicht zur selben Wurzel gehören. Was bedeutet das Ergebnis der Validierung?
Wenn der Artikel nicht existiert, ist es, weil es nicht hinzugefügt wurde und Sie ein Integritätsproblem in dem Befehl haben? Oder wurde es zwar hinzugefügt, aber noch nicht auf die Abfrageseite der Anwendung übertragen? Oder vielleicht wurde es bereits entfernt, bevor der Benutzer den Kommentar gepostet hat?
Was ist, wenn die Validierung bestätigt, dass der Artikel existiert? Vielleicht hat Moderator es entfernt, aber das Ergebnis wurde noch nicht verbreitet?
Erinnern Sie sich, Sie konnten sich nur auf die Reihenfolge der Ereignisse verlassen, wenn sie unter demselben aggregierten Stamm stattfinden.
Zusammenfassend: Sie konnten referenzielle Integrität in einem Befehlshandler überprüfen, solange Sie erkennen, dass es möglicherweise falsche positive und falsche negative gibt. Wenn Sie erwarten, dass eingehende Befehle oft unzuverlässige Daten enthalten, könnte diese Überprüfung die Fehlerrate begrenzen.Versuchen Sie jedoch, die Struktur Ihrer Aggregate zu überdenken, wenn die Konsistenz kritisch ist.
Einverstanden. Ich würde nur hinzufügen, dass, obwohl die Domain nicht dafür verantwortlich ist, zu bestimmen, ob * sie * aufgerufen werden kann, es sicherlich etwas außerhalb der Domain geben sollte, das wahrscheinlich * tut *. Zum Beispiel sollte etwas die Berechtigung prüfen (sollte der Befehl erlaubt sein). Auf die gleiche Weise sollte etwas prüfen, ob es tatsächlich in Ordnung ist, den Befehl auszuführen, da es sicherlich * seltsam * ist, einen Kommentar zu einem Artikel hinzuzufügen, der nicht existiert, und das beispielsweise durch einen Benutzer, der nicht existiert. Dies gilt beispielsweise für das Hinzufügen eines Auftrags für einen Kunden, der nicht existiert. –