Уже много раз встречал код, как мне кажется доведённый до абсурда: контроллер, который выполняет только одну акцию. Особенно в приложениях на Zend Framework и других, которые позволяют удобно использовать модули. Как по мне, так PostAddConroller, PostDeleteController, PostEditController - это слишком. Но недавно я даже увидел фреймворк (от UMI), который и не позволяет вам обрабатывать более одного действия в контроллере, поскольку он вызывает только один метод контроллера (__invoke()) в маршрутизаторе. В моих контроллерах я обычно сосредотачиваю все действия, относящиеся к описываемому им понятию (к примеру, для Post у меня будет просто action_add, action_delete, action_edit и т.п.), изредка выделяя что-то в отдельный класс, если оно реально создаёт отдельные понятия. Мне интересно узнать мнение, чем выгоден первый из описанных мной подходов. Насколько я читал, принцип единственной обязанности - это не то, к чему стоит стремиться просто ради него самого...
лично я за стабильность ))) даже если какое-то правило шокирует поначалу, но работает в данном контексте и помогает найти аналоги в других местах, то почему бы и нет.
я недавно начал делать так Добавлено спустя 1 минуту 40 секунд: Код (Text): <?php namespace controller; class Controller { private $applicationHelper; private $request; private function __construct() { } static function run() { $instance = new Controller(); $instance->init(); $instance->handleRequest(); } function init() { $applicationHelper = ApplicationHelper::instance(); $applicationHelper->init(); } function handleRequest() { $request = new \controller\Request(); $cmd_r = new \command\CommandResolver(); $cmd = $cmd_r->getCommand($request); $cmd->execute($request); $this->identification($request); $this->request = $request; } } Добавлено спустя 2 минуты 24 секунды: по Мэтт Зандстра
Идут по улице два мужика с лопатами, один выкапывает ямки вдоль дороги, другой идет следом и закапывает. Прохожий спрашивает: - Мужики, вы что дурью маетесь? - А между нами еще один должен идти, который деревья сажает. Только он сегодня заболел. Собственно, к вопросу ТС: имхо, в этом нет никакого смысла.
Согласен с таким подходом. В одном контроллере надо сосредоточить все действия над сущностью, ну по крайней мере в пределах контекста. К примеру UserController отвечающий за front (т.е. просмотр/редактирование... для пользователя) и UserController за back (админка). Но разделять их по отдельным действиям, я даже хз как-то, по моему это уже глюки от ООП у людей пошли ) Добавлено спустя 1 минуту 25 секунд: А потом люди матерятся сталкиваясь с твоим кодом и приложенном к нему бубном )
Сразу видно, что ты вообще не врубэйшен. Да ты хоть раз видел мой код? Говоришь тыкая пальцем в небо, ну окай. Ты прям профессор. Экстрасенс телепат. ПРЯМ!
Ага, mahmuzar прав. Мне было интересно, кто что думает. Своё отношение я высказал - мне нравится иметь один контроллер для одного понятия, а не целую кучу. Иначе это получается, как машина, которая имеет один двигатель для езды вперёд, а другой - назад. К тому же, когда проект разрастается, ИМХО, трудно соблюдать принцип. Мне один раз пришлось сопровождать приложение на Zend Framework, где удаление постов почему-то было в контроллере PostRead... Вообще, я потихоньку ввожу в свои приложения SOLID, поскольку ещё не проникся идеей. И пытаюсь смотреть, как это делают другие. Для меня всегда главное, чтоб мне было удобно программировать. Вот, в одном проекте разделил на разные классы функцию выборки данных для отчётов и функцию формирования собственно отчёта, причём в двух разных видах - HTML и файл Excel, получился достаточно красивый код (можно было лучше, но пока мне сойдёт). Опять же, тем не менее, обычно мне удобно похожие функции иметь в одном контроллере, поскольку мне так удобно дорабатывать потом код, если заказчик попросит что-то новое. Ну и к тому же в функциях контроллера я стараюсь не писать больше 5-10 строк кода, если требуется больше - пытаюсь вынести этот код в модель, или в сервисные классы.
ты сказал, что тебе нравится, но не сказал почему. Сейчас вот позиция стала понятнее. это самое главное. иначе и рефакторить будет нечего. Примеров бы. А то я даже не знаю, о чем речь =)
http://umi-framework.ru/documentation/get_started/controllers.html - вот то, что мне не нравится. И этот фреймворк по-другому не позволяет. Я сейчас его посматриваю, поскольку приходится с UMI работать, а 3 версия, которую они обещают скоро выпустить в полном варианте, на нём написана.