Я занят созданием приложения MVC на PHP с использованием инфраструктуры Kohana MVC, и оно работает очень хорошо. Но есть некоторые небольшие неприятности, на которые я хотел бы обратить внимание.
Много логики повторяется в действиях контроллеров и самих контроллеров. Я думал об этом, и я подумал, что было бы разумно определить объект, который содержит эту общую логику, чтобы он не повторялся.
Затем я услышал о моделях представления в некоторых подкастах и на Предотвращение ползания миссии в ваших представлениях, или невежество - блаженство . Итак, модели для просмотра - это то, что я искал.
Но теперь встает вопрос, что вы вкладываете в view-модели. Моя идея состояла в том, чтобы я позволил модели представления собрать всю информацию, необходимую для соответствующего представления. Это имеет то преимущество, что каждому контроллеру / действию просто нужно передать входные данные в модель представления, а затем передать их в представление.
Это умная идея? В момент тестирования было бы разумно передать модель в модель представления, чтобы можно было поиздеваться над ней. Но я не пользуюсь моделями. Вместо этого я позволил контроллерам обращаться к базе данных через Doctrine ORM. Перевод каждого запроса в отдельный метод показался немного неловким, но, может быть, я чего-то упустил.
Из того, что я слышал о моделях представления, они просто DTO. Но в чем преимущество этого в динамически слабо типизированном языке?
Может быть, я полностью на неправильном пути и должен делать это по-другому. Что вы думаете об этом?
Edit:
Большая часть логики, о которой я говорю, - это сбор правильной информации и передача ее нужным представлениям.
Пример:
У меня есть контроллер клиента. У них есть два действия: добавить и изменить. Для этих двух действий я использую одно и то же представление. В обоих действиях назначены одни и те же переменные для представления. В действии добавления, когда форма недопустима, входные переменные снова передаются в представление. В действии редактирования существующие значения передаются через. Это большое дублирование, к которому я бы хотел обратиться.