Лучшие практики проектирования PHP

Хорошо, есть куча вопросов, над которыми я думал последние несколько дней. В настоящее время у меня есть сайт, который представляет собой просто кучу файлов PHP с операторами MySQL, смешанными с PHP, HTML и CSS, в основном огромный беспорядок. Мне было поручено очистить сайт, и я сделал для себя следующие требования:

  • Сайт должен быть эффективным и хорошо продуманным (исходный код), я хотел бы иметь возможность писать как можно меньше кода.
  • Должно быть четкое разделение между структурой, презентацией и логикой.
  • По какой-то причине я не могу использовать фреймворк, и мне нужно, чтобы код поддерживался и был «простым», так как с ним будут работать будущие разработчики.
  • Там должен быть раздел администратора, по крайней мере, на несколько страниц.

Сказав это, вот что я знаю о сайте в его нынешнем виде:

  • Состоит из 10-12 страниц, некоторые из них полностью статичны, большинство динамически управляется через базу данных, и есть огромная форма для заполнения пользователями (20-30 полей), которые необходимо проверить и проверить.
  • Иерархия сайта в основном состоит из 5-6 основных страниц, а затем подстраниц внутри них.

Итак, зная эти вещи, я хотел знать, есть ли у кого-нибудь какие-либо советы / предложения относительно того, как это сделать с наименьшим количеством головной боли.

  • Будет ли подход OO лучшим в этой ситуации?
  • Поскольку есть много статических страниц, а динамическим страницам просто нужно заполнить контент, было бы лучше использовать какой-то базовый шаблон?

РЕДАКТИРОВАТЬ: Спасибо за ответы, когда я сказал никаких фреймворков, я в основном имел в виду все, что потребует нового синтаксиса, отличного от PHP, поскольку любой, кто будет нанят для работы на этом сайте после меня, вероятно, будет знать только PHP.


person roflwaffle    schedule 15.01.2009    source источник


Ответы (3)


Вот статья о том, как организовать ваш PHP-проект от Расмуса Лердорфа, архитектора, создавшего язык:

http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html

Несмотря на популярность объектно-ориентированных фреймворков для PHP, Расмус выступает за менее объектно-ориентированный подход. Он знает больше, чем кто-либо, о предполагаемом использовании PHP и о том, как использовать его архитектуру для высокопроизводительных веб-сайтов.

редактировать: В ответ на комментарий @theman я признаю, что статья не очень хорошо написана, но я думаю, что содержание важно. Лучше использовать PHP так, как он был задуман, чем бороться с его слабостями, чтобы он соответствовал объектно-ориентированному шаблону.

person Bill Karwin    schedule 15.01.2009
comment
Я извиняюсь, но эта статья полный отстой. - person ; 15.01.2009
comment
+1 Я тоже нахожу многие MVC Frameworks слишком раздутыми (посмотрите на наш пример Hello World... требуется всего 11 файлов!). - person cletus; 17.01.2009

Я настоятельно рекомендую механизм шаблонов Smarty для всех PHP-проектов. Это дает вам простой способ отделить логику от презентации.

person rmeador    schedule 15.01.2009

Взгляните на этот SO вопрос и ответ . Это довольно хороший, простой дизайн MVC с некоторыми советами о том, как его можно улучшить. Если вы беспокоитесь об обслуживании, то, по крайней мере, вам нужно отделить представление от логики (вам нужен вид и контроллер). Smarty требует этого, но это тип фреймворка, и вам нужно будет изучить дополнительный синтаксис.

Перед тем, как вы поддержите лозунг Расмуса «no framework php mvc framework», прочтите некоторые критические комментарии. Любая структура веб-приложения — это фреймворк, и подход Расмуса — не лучший из тех, что я видел.

person rick    schedule 15.01.2009
comment
Можете ли вы привести пример того, который является одним из лучших фреймворков, которые вы видели? Я не спорю с вами, мне просто интересно. - person Bill Karwin; 15.01.2009
comment
Что касается php, Kohana лучше всего соответствует моей философии. Большинство компонентов Zend Framework полезны и легко используются в Kohana. - person rick; 15.01.2009
comment
Фреймворк Расмуса имеет ряд проблем imo: - Маленькая абстракция (нет переднего контроллера, нет наследования) - Нет маршрутизации - Контроллер кода Спагетти - Бесполезный код в представлениях (включает, heredoc, $s = $i%2;) - Функции возвращаемый html - не переносимый с использованием кэша pecl и apc - глобальная переменная - person rick; 15.01.2009
comment
Хотел бы я ответить на ваше редактирование Билла. Расумс, возможно, предполагал, что php будет процедурным, но php 5 — это гибкий динамический язык oop. - person rick; 15.01.2009
comment
Хорошо, спасибо за разъяснение. Я думаю, что пример в статье Расмуса является доказательством концепции и определенно нуждается в некоторой очистке. Но я думаю, что это устраняет некоторые критические замечания в отношении производительности PHP-фреймворков. загружая так много классов. - person Bill Karwin; 16.01.2009
comment
Кстати, я руководил проектом Zend Framework до его выпуска 1.0. Итак, я знаком с объектно-ориентированными возможностями PHP, как с хорошими, так и с плохими. - person Bill Karwin; 16.01.2009
comment
Билл, я не знал, что ты связан с Zend Framework. Это хорошо спроектированный набор компонентов. Я согласен относительно количества загруженных классов. Часто достаточно нескольких классов, включая диспетчер, автозагрузчик, контроллер и объект представления. Посыпать компоненты по мере необходимости. - person rick; 16.01.2009