ZF + Doctrine 2: Тяжелые модельные классы или Легкая модель + Сервисный слой? - PullRequest
5 голосов
/ 01 мая 2011

Я интегрирую Zend Framework и Doctrine 2 , и я обнаруживаю Сервисный уровень .

Теперь я понимаю (я ошибаюсь?), Что у меня есть две возможные архитектуры:

  • A модель , где классы содержат доменную логику, то есть свойства + методы получения / установки + сложные методы
  • A облегченная модель , где классы содержат свойства + методы получения / установки и слой Service , содержащий логику домена и изменяющий классы модели

Каковы плюсы / минусы каждого?

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

1 Ответ

14 голосов
/ 01 мая 2011

Что заставляет вас думать, что ваш уровень обслуживания является внешним для вашей модели?Это не так.Фактически, это центральная часть вашей модели, наряду с сущностями, репозиториями и т. Д.

Если вы используете Doctine2, вам понадобится сервисный уровень.Одна из причин заключается в том, что вы не хотите, чтобы ваши сущности знали о EntityManager (ухудшает тестируемость).Другая причина заключается в том, что вы также не хотите, чтобы ваши контроллеры управляли EM (это не работа контроллеров, чтобы знать о постоянстве).

Обычно я использую архитектуру, в которой сервисный уровень является интерфейсом контроллера с моделью.Уровень обслуживания предоставляет функции, которые работают с объектами (либо принимая их в качестве параметров, либо возвращая их, либо и то, и другое).Постоянство сущностей скрыто сервисным уровнем.Либо класс обслуживания управляет EM и самими репозиториями, либо делегирует его другому коду, который контроллер никогда не узнает, существует.

Таким образом, уровень обслуживания предоставляет API-интерфейс, который контроллеры могут использовать для управления вашими бизнес-данными.

...