Ich habe eine neue Anwendung mit meinem aktuellen Verständnis von domain-driven Design erstellt. Bisher habe ich eine Reihe von Klassen, die die Entitäten in meiner Domäne repräsentieren, und ein Repository, um von der Datenbank abzurufen oder in der Datenbank zu bleiben.Domain Driven Design: Abrufen von Listen mit komplexen Daten
Das Problem, auf das ich gestoßen bin, ist, dass ich in der Benutzeroberfläche einige Listen anzeigen muss, in denen die Elemente in der Liste nicht direkt auf Entitäten in meiner Domäne abgebildet werden. Ein Teil der Liste könnte aufgebaut werden, indem einige Entitäten ziemlich tief beansprucht werden, aber andere Daten werden im Wesentlichen zum Zeitpunkt des Abrufs synthetisiert und sind nicht Teil irgendeiner Entität. Lassen Sie mich ein Beispiel geben, das das Problem hoffentlich klarer erklären wird.
In meiner Domäne habe ich Auswertungen (eine Reihe von Fragen zu beantworten) und Antworten (die Antworten, die jeder Benutzer zur Bewertung zur Verfügung gestellt) zu diesen Bewertungen. Ich habe auch Aktionen. Jede Aktion stellt eine Aktion dar, die mit einer Antwort (Senden, Genehmigen, Ablehnen usw.) ausgeführt wurde. Ich habe auch Benutzer.
Eine der Listen von Daten, die ich anzeigen möchte, würde Antworten und Auswertungen enthalten (die nicht beantwortet wurden), dann würde jede Zeile Informationen über den Benutzer enthalten, der gerade mit der Antwort arbeitet (dies wird bei Abrufzeit durch Betrachten der Aktionen, die bei einer Antwort ausgeführt wurden). Jede Werbebuchung enthält auch keine oder mehrere untergeordnete Elemente, bei denen es sich um Aktionen handelt, die bisher für die Antwort ausgeführt wurden.
Das Problem ist, dass ich im Moment keine Möglichkeit habe, den gesamten Datensatz mit meinen Domain-Entities darzustellen. Meine erste Reaktion wäre, einfach eine Datentabelle aus der Datenbank abzurufen und meine Domain-Entitäten zu umgehen. Aber ich sehe viel Wert darin, mit Domänenobjekten zu arbeiten und die Beziehungen zwischen verschiedenen Entitäten in den Objekten selbst zu verankern. Meine nächste Idee wäre also, meine Domain-Entitäten so zu modifizieren, dass sie diese Listen unterstützen, aber ich bin besorgt, dass ich meinen Entitäten seltsame Eigenschaften hinzufügen würde, nur um diese Auflistungsszenarien zu unterstützen und die Leistung zu beeinträchtigen, indem ich im Grunde eine Menge davon mache Objekte, wenn ich diese Daten nur an wenigen Stellen in meinen Apps benötige.
Ok, ich lese jetzt auf Services nach. Wenn Sie sagen, dass der Dienst die Daten als Ansicht darstellt, wie lautet die Ansicht? Ist es eine Klasse, die nur für diesen Zweck definiert ist? Besteht es aus Domain-Entitäten? –
Ich benutze Ansicht im MVC Sinn - das ist etwas, dessen Aufgabe es ist, Ihnen Dinge zu zeigen. Die tatsächlich relevanten Daten werden vom Dienst aggregiert, der dann zur Ansicht weitergeleitet und zur Anzeige gebracht wird (in Ihrem Fall ist dies die von Ihnen genannte "Liste der Daten").Ein Dienst kann sich gut dafür entscheiden, Dinge in separate Klassen zu verpacken (insbesondere wenn viele Ansichten die gleichen Daten verwenden), bevor er sie an Ansichten abgibt, aber das ist keineswegs erforderlich. –