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