MVC: В чем разница между моделью и сервисом?

15

Почему в некоторых системах логический уровень называется «Модель», а в некоторых - «Сервис». Отличаются ли они друг от друга или просто отличаются по именным соглашениям?


ОБНОВЛЕНИЕ 1

Причина, по которой я спрашиваю, заключается в том, что в Zend Framework, классической среде MVC, все используют концепцию Model. Сейчас я изучаю AngularJS, и кажется, что слово Model исчезло и было заменено словом service.

Что я заметил, так это то, что сервис больше похож на одноэлементный, который можно использовать снова и снова (например, клиент REST), тогда как модель больше связана с манипуляциями с данными, поступающими от контроллера в паттерне MVC.

Гилхем Сулас
источник
Обмен вашими исследованиями помогает всем. Расскажите нам, что вы пробовали и почему это не соответствует вашим потребностям. Это свидетельствует о том, что вы потратили время, чтобы попытаться помочь себе, избавляет нас от повторения очевидных ответов и, прежде всего, помогает получить более конкретный и актуальный ответ. Также смотрите Как спросить
gnat
Перефразируя Шекспира: что в названии, роза под любым другим именем - это еще роза. Ваша модель приложения вполне может быть реализована как сервис.
jwenting

Ответы:

22

Модель: поля, принадлежащие объекту, методы, помогающие получить / установить данные из объекта (метод доступа к полному имени, который возвращает имя + фамилию)

Сервис: методы для выполнения операций с одной или несколькими моделями, см. «Единицу работы», транзакции и т. Д.


Employee :: create должен просто взять набор данных, выполнить проверку модели при необходимости и вернуть объект Employee.

EmployeeService :: hireEmployee может создать сотрудника, отправить ему приветственное письмо, создать почтовый ящик, сделать сэндвич и т. Д. ... он может вернуть набор данных или код результата и т. Д. ...


Это также может повлиять на проверку:

Проверка модели: сотрудник должен иметь идентификатор, имя, фамилию и день рождения.

Проверка работоспособности: сотрудникам на должность бармена должно быть не менее 21 года, и они должны быть одобрены менеджером.

FMJaguar
источник
Спасибо за очень конкретный пример, иллюстрирующий, насколько сложной может быть бизнес-логика реального слова, и, следовательно, почему дополнительный уровень обслуживания может помочь помимо уровня модели.
Влнирвана
3

Согласно моему опыту, уровень модели в шаблоне проектирования MVC относится к каждому программному компоненту, связанному с манипулированием данными (POJO, DAO, вплоть до SQL, JDBC и т. Д.).

Принимая во внимание, что уровень обслуживания фактически является дополнением к MVC:

Мы знаем, что компоненты слоя Model вызываются внутри слоя Controller . После того, как последний собран, вы начинаете понимать, что он не выглядит кратким (грязный с грязным кодом); Контроллер может не предоставить дополнительную информацию (например, форматирование параметров запроса перед вызовом метода DAO, который собирается их использовать ...). Поэтому вы можете включить этот дополнительный уровень, а именно уровень сервиса .

В конце концов, вы можете включить ваш грязный код в статические методы со значимым именем, параметрами и т. Д., Что приведет к синтетическому уровню контроллера.

Взгляните на эту ссылку:

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2

Мохамед Эннахди Эль Идрисси
источник
1
Это именно то, как я вижу уровень обслуживания также. Но потом, чаще всего, я вижу, что он используется для обслуживания внешнего API в бизнес-модели. Оба сценария я вижу верным. Проблема здесь только в столкновении номенклатуры.
Ожог
2

Структурно эти базовые классы одинаковы, однако они используются для классификации различных задач уровней Service и Model реализации MVCS

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

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

Сагар Авастхи
источник