Ich frage mich Folgendes: Angenommen, wir erstellen ein System, in dem Filterfunktionen erforderlich sind, um nach einer Entität zu suchen. Beispielsweise möchte man die Filterung möglicherweise auf eine Tabelle anwenden, in der die Entitäten aufgelistet sind, um etwas zu finden, oder damit einen Bericht über eine gefilterte Menge erstellen.
Der Punkt ist: Wir brauchen irgendwo eine Filterlogik. Ein schlechter Weg, dies zu tun, wäre, die Filterlogik bei Bedarf zu replizieren. Ich habe das einmal gemacht und es ist eine schreckliche Idee.
Andererseits glaube ich, dass es eine Methode geben sollte, die Filter(FilteringOptions filteringOptions)
entwickelt wurde, um die Filteroperation durchzuführen und die gefilterte Liste von Entitäten zurückzugeben.
Nun, IMHO, ist die Filterlogik eine Art Geschäftslogik. Die Geschäftsexperten sind diejenigen, die wissen, wie die Filterung erfolgt, welche Dinge gefiltert werden und wie. Aus diesem Grund glaube ich, dass sich die Filterlogik in der Domänenschicht befinden sollte.
Ich habe dafür zwei Möglichkeiten gefunden: Einbetten der Filtermethode in das entsprechende Repository für diese bestimmte Entität oder Erstellen eines Domänendienstes, EntityNameSearchService
der das Repository für die Filterung benötigt.
Ich bin immer noch verwirrt, welcher der bessere Weg wäre. Also, wenn ich versuche, DDD richtig zu verwenden, wo sollte diese Filterlogik sein? Im Repository oder in einem separaten Dienst?
Get*
Methode wiederverwenden und andere oder benutzerdefinierte Filter in die Service-Schicht einführen. Die Entscheidung liegt größtenteils bei Ihnen.