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

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

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

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

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

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

17
задан Community 23 May 2017 в 12:10
поделиться