Wer sollte die Bedingungen in komplexen Abfragen, dem Data Mapper oder der Service-Schicht behandeln?

diese Frage Ich habe meine Verwirrung in dieser Angelegenheit ein wenig ausgeräumt, aber es fällt mir schwer, verlässliche Quellen für die genauen Einschränkungen der Service-Schicht zu finden.

In diesem Beispiel wird angenommen, dass es sich um Bücher handelt und dass Bücher nach Autor sortiert werden sollen. DasBookDataMapper könnte ein Generikum habenget() Methode, die Bedingungen wie die eindeutige Kennung des Buches, den Namen des Autors usw. akzeptiert. Diese Implementierung ist (logischerweise) ziemlich trivial. Was ist jedoch, wenn mehrere Bedingungen vorliegen sollen, die eine komplexere Abfrage erfordern?

Nehmen wir an, wir möchten, dass alle Bücher von einem bestimmten Autor unter einem bestimmten Verlag geschrieben werden. Wir könnten das erweiternBookDataMapper->get() Methode, um mehrere Bedingungen zu analysieren, oder wir könnten eine neue Methode wie schreibenBookDataMapper->getByAuthorAndPublisher().

Ist es vorzuziehen, dass die Service-Schicht diese [spezifischeren] Methoden direkt aufruft oder dass die Bedingungen analysiert werden, bevor die allgemeineren aufgerufen werdenBookDataMapper->get() Methode mit mehreren Bedingungen bestanden? Im letzteren Szenario würde die Service-Schicht mehr vom logischen "schweren Heben" machen, was den Daten-Mapper ziemlich einfach lässt. Die erstere Option würde die Serviceschicht fast vollständig auf einen Mittelmann reduzieren und die bedingte Logik in Methoden wie dem Daten-Mapper überlassenBookDataMapper->getByAuthorAndPublisher().

Die offensichtliche Sorge, die Dienstschicht die Bedingungen analysieren zu lassen, besteht darin, dass ein Teil der Domänenlogik aus dem Daten-Mapper ausläuft. (Dies wird in der verlinkten Frage erklärtHier. Wenn die Serviceschicht jedoch die Bedingungen handhaben sollte, würde die Logik es nicht aus der Modellschicht heraus schaffen. Der Controller würde anrufen$book_service->getByAuthorAndPublisher() ungeachtet.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage