Задать вопрос
pokupo
@pokupo
Разработчик, архитектор, предприниматель

Как правильно реализовать модель в Symfony2 на базе MVC?

Я разобрался, что есть в Symfony2 View, а где Controller, но не могу понять где и как создавать свою модель логики? Знаю, что есть сущности доктрины в папке Entity, которые предоставляют интерфейс к БД с геттерами и сеттерами, но ведь это еще не модель. Модель как раз должна описывать всю логику работы и не с одной таблицей данных, а со всеми возможными связями и ограничениями. Но куда выносить эту модель?


Если отдельно в папку Models, то как в классах модели получить доступ к контейнеру служб, чтобы использовать ту же Doctrine, если класс модели не наследовать от Controller (это же модель, а не контроллер!)? Или нужно реализовывать модель «рядом» с Entity, наследуя от них классы? Мне представляется, что основная часть логики должна быть именно в отдельной модели, а не в контроллере или я, что-то не правильно понимаю?


Прошу поделиться знаниями опытных разработчиков по этому вопросу и помочь в этом вопросе.
  • Вопрос задан
  • 14267 просмотров
Подписаться 22 Оценить Комментировать
Ответ пользователя Владимир Чернышев К ответам на вопрос (5)
Использую доктриновские сущности, нашпигованные методами бизнес-логики. Если для бизнес-логики нужны какие-то сущности, не связанные с текущей схемой данных, то передаю их как параметры методам, предварительно вытаскивая из репозиториев в контроллерах. Сами сущности ничего не знают о хранении их в репозиториях, обычные POPO, вся логика хранения обеспечивается в контроллере.

Сервисы использую когда в методах различных сущностей появляется дублирование кода или просто непонятно к какой сущности отнести тот или иной метод — типичный пример: перевод со счёта на счёт, оба счёта в принципе равноправны, и что метод DebetTo в источнике, что метод CreditFrom в получателе будет выглядеть некрасиво, особенно если будет ещё и третий счёт, на который перечисляется комиссия за транзакцию, а создание класса транзакции в модели нецелесообразно — прямой кандидат в сервисы. Вообще сервисы рассматриваю как функции.
Ответ написан
Комментировать