Здравствуйте, я новичок в доктрине и не знаю, что делать в следующей ситуации:

У меня есть контроллер, который создает новый объект модели «Объявление». Кто несет ответственность за то, чтобы этот объект был постоянным в БД ?. Контроллер, потому что он его создал? или саму модель?

Согласно MVC, модель должна быть единственной, кто имеет дело с БД, поэтому я предполагаю, что мне нужно создать вызов метода «persist» или создать интерфейс с именем model, который будет иметь этот метод и внедрить диспетчер сущностей в конструктор каждая модель вместо того, чтобы сделать объект постоянным с помощью диспетчера сущностей в контроллере.

PD: Я не хочу использовать какие-либо фреймворки вроде Zend, CI и т. Д.

Спасибо!

1
dan87 23 Дек 2013 в 15:58

2 ответа

Лучший ответ

«Модель» - это уровень, а не файл или класс, который имеет дело с постоянством. Постоянство принадлежит этому, но вместе с вашими объектами домена, службами, фабриками и всем остальным, что нужно вашему приложению.

Контроллеры (и представления) являются частью уровня представления и, как таковые, должны нести ответственность только за задачи, связанные с этим.

Если вы реализуете объекты домена, обычно рекомендуется использовать шаблон преобразователя данных для обработки упорство. Если вы настроите это таким образом, то самим объектам вообще не нужно ничего знать о том, сохраняются ли они и как. Это заставляет ваш код соответствовать принципам SOLID и делает его пригодным для тестирования.

Теперь вы можете работать со своими преобразователями данных и объектами домена в своем контроллере, но лучшим решением для большинства приложений является уровень обслуживания. Это позволит вам повторно использовать методы обслуживания в нескольких контроллерах и сохранить кодовую базу DRY . Это особенно полезно, если у вас есть несколько конечных точек для доступа к вашему приложению (например, обычный веб-сайт, область администрирования, API и т. Д.).

Например, класс уровня обслуживания может выглядеть так:

namespace MyApp\Models;

class OrderService
{
    public function getOrders($limit=null, $offset=null)
    {
        $orders = new OrderCollection;
        $orders->setLimit($limit);
        $orders->setOffset($offset);

        $orderCollectionMapper = new OrderCollectionMapper;
        $orderCollectionMapper->populate($orders);

        return $orders;
    }
}
0
Patrick 23 Дек 2013 в 14:34

Контроллер. Когда ваша модель проверена / готова к сохранению.

0
Lajos Veres 23 Дек 2013 в 12:55