В схеме MVC у вас есть обязанности, разделенные между 3 игроками: Модель, Вид и Контроллер.
Модель отвечает за работу с бизнесом, представление представляет результаты бизнеса (предоставляя также данные для бизнеса от пользователя), в то время как контроллер действует как связующее звено между моделью и представлением, разделяя внутреннюю работу. друг от друга.
Модель обычно резервируется базой данных, поэтому у вас есть доступ к ней некоторых DAO. Ваш бизнес делает некоторые ... ну ... дела и хранит или получает данные в / из базы данных.
Но кто координирует DAO? Контроллер? Нет! Модель должна.
Войдите в сервисный слой. Уровень обслуживания обеспечит высокий уровень обслуживания контроллера и будет управлять другими (более низкого уровня) игроками (DAO, другими службами и т. Д.) За кулисами. Содержит бизнес-логику вашего приложения.
Что произойдет, если вы его не используете?
Вы должны будете поместить бизнес-логику куда-нибудь, и жертва, как правило, контролер.
Если контроллер является веб-ориентированным, он должен будет получать свои входные данные и предоставлять ответ в виде HTTP-запросов, ответов. Но что если я захочу вызвать свое приложение (и получить доступ к бизнесу, который оно предоставляет) из приложения Windows, которое взаимодействует с RPC или каким-либо другим способом? Что тогда?
Хорошо, вам придется переписать контроллер и сделать логический клиент независимым. Но с сервисным уровнем у вас уже есть это. Тебе не нужно переписывать вещи.
Сервисный уровень обеспечивает связь с DTO, которые не привязаны к конкретной реализации контроллера. Если контроллер (независимо от того, какой тип контроллера) предоставляет соответствующие данные (независимо от источника), ваш уровень обслуживания выполнит свою задачу, предоставляя услугу вызывающей стороне и скрывая ее от всех обязанностей соответствующей бизнес-логики.