Wo sollte ich Felder wie CreatedDate, CreatedBy, ModifiedDate, ModifiedBy festlegen? Soll ich den aktuellen Benutzerkontext an das Repository übergeben und dort einstellen oder ist es vielleicht besser, ihn im Anwendungsdienst zu setzen (aber dann muss dies in jeder API-Methode geschehen und nicht nur in Hinzufügen/Aktualisieren im Repository)?DDD: Wo sollte ich das Änderungsdatum einstellen und um? Repository oder Anwendungsdienst?
Antwort
Ich bevorzuge es, sie im Repository zu setzen. Fügen Sie einen Parameter in die vorhandene add/update-Methode mit dem Namen int operatorId
oder etwas Ähnliches ein.
Wenn Sie den Code in den Anwendungsdienst eingeben, müssen Sie sich immer wiederholen. Und wenn Sie vergessen, einige Werte zu setzen, werden Ausnahmen ausgelöst, wenn Änderungen gespeichert werden (manchmal sogar noch schlimmer, keine Ausnahmen, sondern schmutzige Daten).
Wir setzen Entitätsstatus immer innerhalb von Anwendungsdiensten. Repositories dienen zum Speichern von Daten, sie sollten keine Logik enthalten. Die Domänenentität wird im Anwendungsdienst erstellt/geändert. Daher legen Sie diese Felder fest. Die Erstellungs-/Änderungsdaten sollten nicht reflektieren, wann die Entität in der Datenbank gespeichert wurde, sondern eher, wenn die Entität tatsächlich gespeichert/geändert wurde.
Wir finden auch, dass wir normalerweise unsere Domain-Entitäten auf Data-Layer-Entitäten abbilden müssen, um mit der zugrunde liegenden Datenbanktechnologie freundlicher zu sein. Wir verwenden oft Tools wie Auto-Mapper, um diese Mappings zu automatisieren. Wenn Felder in einer Entität vorhanden sind, die in ihrer Datenentitätsäquivalent nicht vorhanden ist, wird unnötige Komplexität hinzugefügt.
"Repositories dienen zum Speichern von Daten, sie sollten keine Logik enthalten". Sie denken, ein 'StudentRepository' hat eine Methode mit dem Namen' GetStudents (int grade) ' weil es die Logik hat, Schüler nach ihrer Note zu bekommen? –
Ich nehme an, bstrack bedeutet "Domain-Business-Logik" – Khronos
Es hängt von Ihrer Domäne ab.
Wenn Werte wie CreatedDate
, CreatedBy
... zum Verfolgen oder Protokollieren Zweck sind, dann würde ich sie in die Infrastructure
(Repository) setzen.
Auf der anderen Seite, wenn diese Werte aus irgendeinem Grund zu meiner Domäne gehören, dann würde ich sie in der Domain-Ebene platzieren.
Beispiel: Abbildung, dass ein Kunde in einem Banking-Transfer-Kontext eine Übertragung nur bis 24 Stunden nach der Übermittlung zur Abrechnung abbrechen konnte. Dann benötigt die Domäne CreateTransferDate
, um die Invarianten zu erfüllen.
Eine andere Option könnte ein Listener sein, der alle Domain-Ereignisse konsumiert und historische Zeitdaten von dem speichert, was passiert.
- 1. Wo sollte ich DDD einmalig einchecken?
- 2. DDD/Repository
- 3. Wo sollte ich meine Funktionen einstellen?
- 4. Basierend auf DDD-Praktiken, wo sollte diese Logik gehen und wie vermeide ich unnötige Abhängigkeiten?
- 5. Wird der Controller in MVC als Anwendungsdienst für DDD betrachtet?
- 6. Wo gehören alle "Bulk" -Operationen in DDD?
- 7. Wann sollte ich GL_TEXTURE_MIN_FILTER und GL_TEXTURE_MAG_FILTER einstellen?
- 8. DDD-Repository-Kenntnis anderer Repositories
- 9. Wo sollte ich Entwicklungstools installieren?
- 10. Wo sollte ich Logger-Code speichern, um Abhängigkeiten zu reduzieren?
- 11. Wie bekomme ich das Erstellungs- und Änderungsdatum in Orion
- 12. Sollte ein Repository ein anderes Repository aufrufen? Oder sollte ein Repository eine Service-Schicht aufrufen?
- 13. Repository-Muster und Layering. Wo verwende ich Sicherheit?
- 14. DDD - Repository Pattern zurückgebende db keys?
- 15. Wo sollte ich IBOutlets und IBActions platzieren?
- 16. Ist das wirklich DDD?
- 17. Powershell oder anderes Skript, um Dateien zu erstellen Erstellungsdatum = Änderungsdatum
- 18. wo finde ich maven repository für kafka?
- 19. Linq zu SQL mit Repository-Muster und DDD
- 20. DDD Aggregat Wurzeln und Einheiten
- 21. Wie gehen Sie mit DDD und EF4 um?
- 22. Wo sollte ich Navigationscode eingeben?
- 23. Wo sollte ich Database.EnsureCreated platzieren?
- 24. Welches JavaScript-Repository sollte ich verwenden?
- 25. Sollte ein Repository UnitOfWork implementieren?
- 26. Sollte ich beitreten oder sollte ich UNION
- 27. DDD und Konfiguration
- 28. Wie sollte ich Belichtung und Weißabgleichwerte für benutzerdefinierte Kamera einstellen?
- 29. Symfonie. Wo sollte ich komplexe Anfragen stellen?
- 30. REPL Konsole Anwendungsdienst
Wir erlauben niemals, dass sich die Entitäten in einem ungültigen Zustand befinden. Wir tun dies, indem wir Design durch Vertragsprüfungen durchsetzen (Vorbedingungen, Invarianten und Postbedingungen, wo zutreffend). Auf diese Weise stellen Sie sicher, dass niemand "vergessen" kann, Werte zu setzen. – bstack