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