Я уже некоторое время борюсь с тем, как именно перекодировать PHP-приложение на основе страниц с использованием среды MVC. Просто для фона мне нужно переместить приложение в MVC, потому что мой босс заставляет меня. Так или иначе, я сел и распечатал структуру каталогов. Затем я начал пытаться спланировать, как я могу преобразовать эти страницы в пары контроллер/действие. Некоторые вещи кажутся очень прямыми. Например, у меня была пара страниц, посвященных добавлению/редактированию/удалению пользователя. Очень просто создать «пользовательский» контроллер и добавить методы или действия для добавления/редактирования/удаления. У меня возникают проблемы, когда я решаю, когда на самом деле создавать контроллер, а когда делать что-то просто действие, поскольку это не всегда так однозначно. Например, контроллер входа в систему по сравнению с пользователем/логином или контроллер регистра по сравнению с пользователем/регистром. На мой взгляд, если объект может что-то сделать, вполне логично быть действием, но это не всегда так однозначно.
Другой пример: у меня есть около 12 страниц форм, которые используются для создания «плана». В моей голове я бы подумал, что мне нужно создать контроллер «плана», и каждая из старых страниц for станет действием. Так что у меня был бы один контроллер с 12 действиями (методами). Проблема для меня в том, что, хотя все эти 12 страниц являются формами ввода данных, которые в конечном итоге составляют этот «план», это все, что у них общего. Каждая из страниц использует разные таблицы в базе данных и не имеет ничего общего друг с другом. По сути, создавая контроллер «плана», я действительно использую его как механизм группировки; не обязательно использовать его, потому что они имеют что-то связанное друг с другом. По крайней мере, в приведенном выше примере «пользовательского» контроллера; каждое из этих действий использует одну и ту же «пользовательскую» таблицу, поэтому имеет смысл сгруппировать эти действия в один контроллер. Должен ли я сделать каждую из этих форм ввода данных собственным контроллером?
Я предполагаю, что это просто сводится к тому, чтобы позволить себе использовать контроллеры в качестве сущности иерархической структуры вместо объектов/действий. Просто кажется, что очень легко попасть в эту ловушку, неправильно используя контроллеры. Кто-нибудь понимает, что я говорю? Надеюсь, это не слишком запутанно.
EDIT: если я попытаюсь придерживаться одного контроллера для каждого представления; Затем я буду сводить код для каждого запроса к минимуму. Это лучший способ?
EDIT: Из того, что все говорят, кажется, что один контроллер на представление не будет в моих интересах. У меня все еще есть некоторые опасения, потому что кажется, что контроллер может быстро стать толстым, но это для другого обсуждения. У меня также все еще есть некоторые проблемы, связанные с тем, когда принимать решение об использовании контроллера вместо действия. Хорошим примером может быть само переполнение стека. В верхней части страницы у вас есть выбор «Вопросы», который, как мы можем предположить, приведет вас к контроллеру «вопросов». Я говорю это, потому что с правой стороны вы можете выбрать «Задать вопрос», URL-адрес которого указывает на «вопросы/спросить». Это имеет смысл, что вы используете метод ask контроллера вопросов. Что меня смущает, так это то, что у вас есть опция «Без ответа» в меню. Похоже, у этого есть контроллер для себя. Почему бы просто не выполнить действие под контроллером вопросов, как в «вопросы/без ответа»? Вот где вещи становятся мутными для меня.