2011-02-01 5 views
13

Я пытался выяснить, могу ли я применить архитектуру MVC к процедурной и как я могу реализовать ее в своем коде. По моему мнению, MVC в основном представляет собой разделение бизнес-логики, презентационного уровня и другой логики, хотя, как представляется, он всегда нацелен на OO-PHP в частности.Могу ли я применить шаблон проектирования MVC к процедурной PHP

Можете ли вы порекомендовать лучший способ приблизиться к MVC в рамках процедурного контекста?

Спасибо.

+1

+1 @ Даниэль Хороший вопрос, я смотрю что-то на этом пути, имеет много времени, и до сих пор у меня нет хороших ответов, я надеюсь, что кто-то даст вам хороший ответ. В принципе, процедурный стиль программирования - это много инструкции почти в одном и том же месте, я имею в виду длинные коды, сложное обслуживание и т. Д., А в OO - другое. Когда-то, я сделал mysqlf в трех разных частях. Bussines Logic, Templates (интерфейсы, возможно иметь логику шаблона) и, наконец, абстракцию данных. В общем, MVC делает что-то вроде этого, зависит от того, какую инфраструктуру вы используете. Это немного сложно. – B4NZ41

+0

Я очень отговариваю людей от запуска нового проекта с процедурным PHP. Если вы хотите использовать MVC в старом проекте: перепишите свой проект в ООП. Доверьтесь мне. ООП открывает свой проект в совершенно новом мире. – Shoe

+0

Да, у меня проблемы с получением OO для правильной работы для меня и хочу попробовать реализовать MVC-архитектуру для моего кода. Я не использую никаких фреймворков, я кодирую с нуля. –

ответ

10

MVC является OO шаблон, и вы хотите, чтобы подойти к нему с процедурным контекстом.

Это просто неправильно. MVC не имеет ничего общего с объектно-ориентированным кодированием.

MVC - это шаблон архитектуры программного обеспечения, целью которого является разделение представления информации от взаимодействия пользователя с ней.

Как вы достигаете этого, зависит от вас. Вы можете достичь этого, используя любую форму кодирования, которую хотите, объектно-ориентированный, процедурный, функциональный, а что нет.

Что касается вопроса: самый простой способ получить шаблон MVC при программировании PHP - это использовать множество небольших функций, где каждая конкретная функция имеет свою уникальную задачу. Не позволяйте функции выполнять много задач. Таким образом, легче отделять вещи. Также не храните много функций в одном файле. Скорее собирайте связанные функции вместе в меньших группах каждой группы в своем собственном файле (что на самом деле сделано в OO с классами).

Кто-то делает это здесь на простом примере, MVC без OO: http://www.fluffycat.com/PHP-Design-Patterns/Non-OO-MVC/

+0

Да, я должен согласиться. Это было довольно давно. На самом деле в итоге вы сделали что-то похожее на ваш пример. Хотя проще использовать OO, поскольку он заставляет вас создавать отдельные функции. –

11

Угу, что о резюмирует MVC ... но он не должен быть объектно-ориентированным ... вам просто нужно следовать нескольким золотых правил:

  1. Контроллер принимает и обрабатывает ввод, генерирует любые данные и помещает их в модель.
  2. Вид принимает данные от модели и визуализирует ее.
  3. Контроллер не должен форматировать данные для просмотра - он не должен знать, как/почему/что хочет просмотр (например, не вставляет HTML в текстовую строку, поскольку вывод может быть JSON)
  4. не искать какие-либо данные для себя - если это не в модели, то контроллер не смог выполнить свою работу (выбросить/сообщить об ошибке).

Помимо этого вы можете делать все, как хотите. Вам в принципе понадобится набор процедур для управления контроллерами - разбор $_REQUEST vars (более вероятно, как GET/POST/COOKIE), выполняющий любое построение поиска данных + заполнение модели, а затем еще один набор процедур, которые при просмотре в модели и рендеринга для пользователя. Модель может быть простой, как ассоциативный массив.

+0

Спасибо, мне просто нужно разделить мои модели и представления на отдельные файлы, и я должен был бы это отсортировать. Только один быстрый вопрос, все запросы должны проходить через файл index.php или это может быть буквально что-то вроде этого, нажмите на ссылку var var, чтобы перейти к search.php, затем страница поиска может получить доступ к модели и представлениям для функция поиска через контроллер? –

+3

Абсолютно. Шаблон дизайна - это не что иное, как шаблон. Вы можете реализовать его в любой парадигме ... +1 – ircmaxell

+2

Пока каждая страница '.php' имеет вызов контроллера (который ничего не выводит), а затем вызов по вызову нет никакой причины, вы не можете разделить его на отдельные страницы. – Rudu

0

Это странно. MVC - это шаблон OO, и вы хотите подходить к нему с процедурным контекстом.

Первое, что приходит мне на ум, - это иметь какой-то механизм шаблонов, чтобы разделить PHP на код HTML. Это будет один большой шаг к процедурной MVC :)

Следующая вещь - назвать функции одной и той же группы (то есть функции, которые содержат логику для связанных объектов) с префиксами (например, вы группируете методы под именем класса) ,

Например - смотрите PHP процедурные функции для работы с MySQL:

mysql_connect() 
mysql_real_escape_string(); 
mysql_select_db(); 
mysql_query(); 

т.д. и сгруппировать эти функции в отдельных файлах. Это также поможет отделить немного от логики.

Если что-нибудь еще приходят на мой взгляд, я буду править мой пост :)

+0

Спасибо, я действительно не уверен, как это решить, я пробовал это в OO-PHP, но нашел некоторые проблемы при правильной реализации архитектуры. –

0

Если вы реализуете новый шаблон проектирования вы, скорее всего, будут рефакторинга или писать что-то с нуля. Я настоятельно рекомендую перейти на ООП, если вы планируете использовать MVC. Это может быть реализовано процедурно, но будет очень хакерским, а не хорошим решением.

Существует несколько бесплатных решений для PHP MVC, которые вы можете легко найти.Вот некоторые из них:

  • Zend Framework
  • Kohana
  • Код Ignighter
+1

Спасибо, но мне нужно закодировать это с нуля, а не использовать фреймворк. –

+0

Красивый выбор. Еще лучше создать свою собственную инфраструктуру. – Shoe

+0

Ну, я бы хотел, но я не знаю, с чего начать! –

0

Абсолютно. Используйте любую комбинацию из следующих функций:

  1. Используйте файлы с указанием всех подключаемых файлов.
  2. Использование функций.
  3. Отделите исходные файлы.
  4. Разделите разделы своего кода в исходных файлах.
  5. Используйте кодовые блоки (фигурные скобки).
  6. Отдельные файлы PHP и/или HTML и/или JS.

Все, что организует ваш код больше в соответствии с моделями, представлениями и контроллерами. Это может быть не «чистый» или «правильный» MVC в умах некоторых людей ... но если он более осмысленно структурирует ваш процессуальный код или учит вас больше о MVC, тогда это хорошо.

Смежные вопросы