Hier eine kurze Erklärung meiner Domain:Wie würde ein Voting/Like-System in einem DDD/CQRS/EventSourced-Projekt modelliert?
Ich habe Artikel, die im Grunde wie jeder Artikel (Titel, Zusammenfassung und ein Körper) sind.
Ich muss Stimmen zu meinen Artikeln erlauben, Stimmen werden von anonymen Benutzern abgegeben (keine Registrierung erforderlich, aber eine Sitzung wird Stimmen speichern, bitte nicht darauf konzentrieren).
In dieser Domäne ist Artikel meine Gesamtwurzel.
ich nicht einen Weg finden kann meine Stimmen mit folgenden Anforderungen zu modellieren:
kanneine Abstimmung entweder Ich mag oder Ich mag es nicht sein, sollte es wandelbar sein (es im Laufe der Zeit geändert werden kann, oder sogar storniert)
Ein Gastbenutzer mit zugehöriger Sitzung kann nur eine Stimme pro Artikel abgeben.
Soll also Vote alleine aggregiert sein?
so etwas wie
Class Vote { public function cast(ArticleId id, GuestSessionToken token, VoteValue value); }
Aber in diesem Fall, wie soll ich für unicity überprüfen? Eventuelle Konsistenz verwenden (es scheint in Ordnung zu sein, da ich einige Duplikate nicht habe, soweit sie selten sind).
Denn wenn ich meinem Artikel-Aggregat die Vote-Methode hinzufüge, muss ich den Verlauf für jede abgegebene Stimme wiederholen, was ziemlich langsam klingt (angesichts der Tatsache, dass ich 100.000 Stimmen pro Artikel haben kann).
Ich weiß, dass Leistung und Optimierung beim Entwurf der DDD-Methode nicht berücksichtigt werden sollten, aber hier ist es ein spezifisches Problem, das ich vorher lösen muss, um irgendetwas zu implementieren.
Jeder von euch hat schon einmal etwas Ähnliches gemacht?
Ich beantwortete eine ähnliche Frage hier: http://stackoverflow.com/a/38259448/225022 – Bishoy