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