Могу ли я применить шаблон проектирования MVC к процедурной PHP
Я пытался выяснить, могу ли я применить архитектуру MVC к процедурной и как я могу реализовать ее в своем коде. По моему мнению, MVC в основном представляет собой разделение бизнес-логики, презентационного уровня и другой логики, хотя, как представляется, он всегда нацелен на OO-PHP в частности.
Можете ли вы порекомендовать лучший способ приблизиться к MVC в рамках процедурного контекста?
Спасибо.
Ответы
Ответ 1
MVC - это шаблон OO, и вы хотите подходить к нему с процедурным контекстом.
Это неправильно. MVC не имеет ничего общего с объектно-ориентированным кодированием.
MVC - это шаблон архитектуры программного обеспечения, целью которого является разделение представления информации от пользовательского взаимодействия с ней.
Как вы это достигаете, зависит от вас. Вы можете достичь этого, используя любую форму кодирования, которую вы хотите, объектно-ориентированный, процедурный, функциональный, а что нет.
Что касается вопроса: самый простой способ получить шаблон MVC при кодировании процедурного PHP - использовать множество небольших функций, где каждая конкретная функция имеет свою уникальную задачу. Не позволяйте функции выполнять много задач. Таким образом, легче отделять вещи. Также не храните много функций в одном файле. Скорее собирайте связанные функции вместе в меньших группах каждой группы в своем собственном файле (что на самом деле сделано в OO с классами).
Кто-то делает это здесь с простым примером: MVC без OO: http://www.fluffycat.com/PHP-Design-Patterns/Non-OO-MVC/
Ответ 2
Да, это о суммировании MVC... но это не обязательно должно быть объектно-ориентированным... вам просто нужно следовать нескольким золотым правилам:
- Контроллер получает и обрабатывает ввод, генерирует любые данные и помещает их в модель.
- Вид принимает данные из модели и отображает ее.
- Контроллер не должен форматировать данные для просмотра - он не должен знать, как/почему/что хочет просмотр (например, не вставляет HTML в текстовую строку, поскольку вывод может быть JSON)
- В представлении не нужно искать какие-либо данные для себя - если это не в модели, тогда контроллер не выполнил эту работу (выбросить/сообщить об ошибке).
Помимо этого вы можете делать все, что захотите. Вам в принципе понадобится набор процедур для управления контроллерами - разбор $_REQUEST
vars (более вероятно, как GET/POST/COOKIE), выполняющий любое построение поиска данных + заполнение модели, а затем другой набор процедур, которые при просмотре - взяв то, что в модели, и отрисует ее для пользователя. Модель может быть простой, как ассоциативный массив.
Ответ 3
Это странно.
MVC - это шаблон OO, и вы хотите подходить к нему с процедурным контекстом.
Первое, что приходит мне на ум, - это иметь какой-то шаблонный движок, чтобы разделить PHP на код HTML. Это будет один большой шаг к процедурной MVC:)
Следующее - назвать функции одной и той же группы (то есть функции, которые содержат логику для связанных объектов) с префиксами (например, вы группируете методы под именем класса).
Например, посмотрите PHP процедурные функции для работы с mysql:
mysql_connect()
mysql_real_escape_string();
mysql_select_db();
mysql_query();
и т.д..
И группируйте эти функции в отдельные файлы. Это также поможет отделить немного от логики.
Если что-нибудь еще придет мне на ум, я отредактирую свой пост:)
Ответ 4
Если вы внедряете новый шаблон дизайна, вы, скорее всего, реорганизуете или пишете что-то с нуля. Я настоятельно рекомендую перейти на ООП, если вы планируете использовать MVC. Это может быть реализовано процедурно, но будет очень хакерским и не лучшим решением.
Есть несколько бесплатных MVP-решений, которые вы можете легко найти. Вот несколько:
- Zend Framework
- Kohana
- Идентификатор кода
Ответ 5
Совершенно верно. Используйте любую комбинацию из следующих функций:
- Использовать файлы include.
- Использовать функции.
- Отделите исходные файлы.
- Разделите разделы кода в исходных файлах.
- Используйте блоки кода (фигурные скобки).
- Отдельные файлы PHP и/или HTML и/или JS.
Все, что организует ваш код больше в соответствии с моделями, представлениями и контроллерами. Это может быть не "чистый" или "правильный" MVC в умах некоторых людей... но если он более осмысленно упорядочивает ваш процедурный код или учит вас больше о MVC, тогда это хорошо.