Кто должен обрабатывать условия в сложных запросах, отображение данных или уровень обслуживания?

этот вопрос Я проделал очень хорошую работу, чтобы немного устранить мою путаницу по этому вопросу, но мне трудно найти надежные источники о том, какими должны быть точные ограничения уровня обслуживания.

Для этого примера предположим, что мы имеем дело с книгами, и мы хотим получать книги по авторам.BookDataMapper может иметь общийget() метод, который принимает условия, такие как уникальный идентификатор книги, имя автора и т. д. Эта реализация довольно тривиальна (логически), но что, если мы хотим иметь несколько условий, которые требуют более сложного запроса?

Допустим, мы хотим, чтобы вся книга была написана определенным автором под конкретным издателем. Мы могли бы расширитьBookDataMapper->get() метод для анализа нескольких условий, или мы могли бы написать новый метод, такой какBookDataMapper->getByAuthorAndPublisher().

Желательно ли, чтобы сервисный уровень вызывал эти [более конкретные] методы напрямую, или чтобы условия были проанализированы перед вызовом более общегоBookDataMapper->get() метод с несколькими условиями пройден? В последнем сценарии уровень обслуживания будет делать больше из логической «тяжелой работы» оставляя маппер данных довольно простым. Первый вариант сводил бы уровень обслуживания почти полностью к среднему уровню, оставляя условную логику мапперу данных в таких методах, какBookDataMapper->getByAuthorAndPublisher().

Очевидная проблема с тем, чтобы позволить сервисному уровню анализировать условия, заключается в том, что некоторая логика домена просачивается из преобразователя данных. (это объясняется в связанном вопросеВот, Однако если бы уровень обслуживания должен был обрабатывать условия, логика не сделала бы его из уровня модели; Контроллер позвонит$book_service->getByAuthorAndPublisher() несмотря на.

Ответы на вопрос(2)

Ваш ответ на вопрос