Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Matthieu NapoliОтветов: 1

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

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

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

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

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

  • Всегда возможно более двух архитектур Fatmuemoo 02.05.2011

phparchitecturedoctrine-ormzend-frameworkservice-layer

Ответы

Ответ 1 · рейтинг 14 · timdev

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

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы