ZF + Doctrine 2: Тяжелые классы моделей или Легкая модель + Сервисный уровень?

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

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

  • Модель , где классы содержат логику домена, т.е. свойства + геттеры / сеттеры + сложные методы
  • Легкая модель , в которой классы содержат свойства + геттеры / сеттеры и уровень обслуживания , содержащие логику домена и модифицирующие классы моделей

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

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

Related of "ZF + Doctrine 2: Тяжелые классы моделей или Легкая модель + Сервисный уровень?"

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

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

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

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