В последнее время я пытался улучшить / отойти от стандартной установки MVC для веб-разработки, и я подумал, что пора бросить свои идеи в StackOverflow.
Общий поток такой же, как при начальной загрузке создает начальные объекты. Разница в том, что они хранятся в ServiceManager.
Затем, вместо отправки контроллера, он загружает представление.
Затем представление вызывает Команды и Запросы. Команды представляют функциональность, которая, как правило, связана с формой (обычно обновляет строки базы данных), а запросы - это то, что обычно будет ModelPeers. Когда они создаются (через ServiceManager), им передается ServiceManager, что избавляет от необходимости большого количества потенциально сложных инъекций зависимостей.
Сами модели просто создают / обновляют / удаляют в одной строке.
Таким образом, вид будет выглядеть так:
ListUsers.php
<?php $users = $this->ServiceManager->get('Query\User')->getNewestUsers(10); ?>
<?php foreach($users as $user): ?>
....
<?php endforeach; ?>
UpdateUser.php
<?php $this->ServiceManager->get('Command\User')->update(); ?>
<form>...</form>
Я знаю, что есть какое-то нарушение уровня, но это кажется намного чище, чем иметь набор контроллеров, которые действуют больше как ViewVariableSetters, чем что-либо еще.
Это также делает все гораздо более тестируемым, поскольку все функциональные возможности инкапсулированы в Команды и Запросы и удалены от больших контроллеров. Технически, у меня мог бы быть контроллер или ViewVariableSetter, но кажется, что он добавил бы намного больше кода с очень небольшим преимуществом.
Буду признателен за любые отзывы, и, пожалуйста, дайте мне знать, если я смогу что-то уточнить.