Ich erstelle eine Web-CRUD-Anwendung, die nach der Verarbeitung der internen Logik Ereignisse auf anderen Systemen veröffentlicht, um ihre Daten zu aktualisieren.CQRS-Intent-Befehlsereignis
Ich bin im ersten Schritt der Implementierung von CQRS und es klingt komisch, dass ich spezifische Befehle für alle möglichen Absichten des Benutzers in einem Formular erstellen muss, wo ich nur eine "Speichern" -Schaltfläche habe. Das bedeutet eine Menge von Befehlen (für jede Eigenschaft oder jedes Wertobjekt), um eine Absicht zu erfassen nicht in meinen Anforderungen benötigt, aber in den kommenden Projekten, die es abonnieren werden benötigt. Ich bin ein Fan von NUR, was mein beschränkter Kontext erfordert.
Eine andere Sache zu berücksichtigen: Ich muss Sitzung verwenden, um zu vergleichen, ob die Daten geändert wurden oder nicht. Wenn Sie die Daten nach dem Speichern fälschen, werden Nebenläufersituationen mit falschen Daten in der Benutzeroberfläche ausgeblendet.
EDIT: Ich habe gerade gefunden this thread wo Greg Young schlägt vor, dass einige Bildschirme nur CRUD sind und es nichts Schlechtes darin ist, das Update als Standardverhalten zu machen.
Ich mache es auf diese Weise. Mein CRUD-Projekt ist ein internes "Konfigurationstool", um die korrekten Daten auf einer stark frequentierten Website anzuzeigen. Daher muss ich Ereignisse veröffentlichen. Meine perfekte Lösung wäre, dieses Projekt mit nur DDD, ohne CQRS zu erreichen und ein Ereignis für jede echte Absicht in meinem Umfang zu veröffentlichen. Die Website sollte mit CQRS erreicht werden, da es Tausende von Benutzern haben wird. Ich sehe nicht, warum ich so viele Befehle erstellen muss, wenn meine Anforderungen nur lauten: "Ein Formular mit einer Schaltfläche zum Speichern erstellen" – Cesar
Wenn der einzige Grund für CQRS Skalierbarkeit ist, dann können Sie einfach etwas einfacheres versuchen. Das heißt: Verwenden einer Art von Speichercache, um die Belastung von Websites zu reduzieren (oder Webansichten auf eine Weise zu veröffentlichen, die die Datenbank nicht belastet - d. H. JSON auf CDN), oder nur das standardmäßige Server-Caching zu optimieren. CQRS tritt normalerweise dann auf, wenn sich das Projekt mit einigen dieser Aufgaben befassen muss: Bewältigung komplexer Geschäftsszenarien, Skalierung, Bereitstellung umfangreicher BI-Funktionen, Anpassung an sich schnell ändernde Anforderungen. –
Das Szenario ist komplex und Systeme laufen bereits mit Memcache. Wir können viele Vorteile aus den CQRS-Praktiken ziehen. Es besteht kein Zweifel an dieser Entscheidung. Die Website wird mit CQRS neu aufgebaut. Der Zweifel bezieht sich hauptsächlich auf jene kleinen Projekte, die die Website umgeben, und wenn sie stattdessen einen großen Befehl oder kleine Befehle senden sollten (dasselbe gilt für Ereignisse). All diese Gedanken kommen von einem Entwickler mit einem starken Hintergrund von DDD, beschränkten Kontexten und erfolgreicher Lieferung. Jetzt muss ich alle Absichten kodieren und Sitzung behandeln, um die Version der Daten zu behalten. (BTW ich liebe, Ihren Blog zu lesen) – Cesar