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


15

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


ОБНОВЛЕНИЕ 1

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

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


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

Перефразируя Шекспира: что в названии, роза под любым другим именем - это еще роза. Ваша модель приложения вполне может быть реализована как сервис.
jwenting

Ответы:


22

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

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


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

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


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

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

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


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

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.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.