Я интегрирую Zend Framework и Doctrine 2 , и я обнаруживаю уровень сервиса .
Теперь я понимаю (я ошибаюсь?), Что у меня есть 2 архитектуры:
Каковы плюсы и минусы каждого?
Мне кажется странным потерять ООП, поместив логику домена как внешнюю по отношению к модели, поэтому я не понимаю, зачем использовать сервисный уровень.
Что заставляет вас думать, что ваш уровень обслуживания является внешним по отношению к вашей модели? Это не так. Фактически, это центральная часть вашей модели, а также сущности, хранилища и т. Д.
Если вы используете Doctine2, вам нужен уровень сервиса. Одна из причин заключается в том, что вы не хотите, чтобы ваши сущности знали о EntityManager (ущемляет тестируемость). Другим является то, что вы также не хотите, чтобы ваши контроллеры управляли EM (это не задача диспетчеров знать о сохранении).
Обычно я использую архитектуру, где уровень сервиса является интерфейсом контроллера к модели. Сервисный уровень предоставляет функции, которые работают с объектами (либо принимают их как параметры, либо возвращают их, либо и то, и другое). Стойкость объектов скрыта уровнем обслуживания. Либо сервисный класс управляет EM и репозиториями, либо делегирует его другому коде, который никогда не будет знать контроллер.
Таким образом, сервисный уровень и API, которые контроллеры могут использовать для управления вашими бизнес-данными.