Архитектура / дизайн веб-приложений PHP [закрыто]


20

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

  • Отделение задней части от передней части
  • Структура каталогов

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


Здравствуй! Наиболее распространенная архитектура для веб-приложений - это MVC , для PHP и любой другой популярной веб-платформы. Тем не менее, вы должны прочитать наш FAQ . Хотя архитектура программного обеспечения обсуждается, вам нужно пересмотреть вопрос, чтобы он был более конкретным. «Здоровая дискуссия об общей архитектуре» не соответствует формату вопросов и ответов сайта.
Яннис

Я часто бываю на сайтах S / E, у меня было ощущение, что на этот вопрос не будет единого ответа, следовательно, комментарий «обсуждения». Спасибо за указатель MVC, хотя :)
Брэд Моррис

Ответы:


29

Грубая схема архитектуры последнего крупномасштабного проекта, в котором я участвовал.

введите описание изображения здесь

Это только базовая схема, адаптированная из фактических архитектурных документов и представленная способом, который напоминает типичный n-уровневый подход в сочетании с типичным подходом MVC . Как вы можете видеть, логика и уровни данных связаны через сервисный уровень и, более конкретно, REST API , который был вдохновлен Recess , менее известным PHP-фреймворком.

Не изобретай велосипед

Я работаю с тремя фреймворками:

  • Zend Framework

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

  • Kohana

    Kohana начинал как ответвление CodeIgniter, и это было достаточной причиной, чтобы я не использовал его изначально. В настоящее время он превратился в солидную и элегантную структуру, которая отличает себя друг от друга, следуя иерархическому подходу MVC . HMVC допускает большее расширение модульности, чем MVC . Для проекта на диаграмме я адаптировал HMVC от Kohana к ZF, но я начал использовать Kohana для небольших проектов, а также рассмотреть его для более крупных проектов.

  • CodeIgniter

    Я использую его только из-за унаследованного проекта, избегайте, если это возможно.

Как указывали другие ответы, ORM всегда пригодится. Я широко использую Doctrine , и вы должны взглянуть на его новые картографы для CouchDB и MongoDB . Масштабируемость необходима для крупномасштабных приложений, и вы должны оценить решения NoSQL .

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

Производительность

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

xdebug в основном известен как отладчик, но может также использоваться как профилировщик . Я недавно начал использовать Zend Server и абсолютно обожаю его функции трассировки кода . К сожалению, их нет в Community Edition , но xdebug - довольно приличная альтернатива.

Если вы используете Apache, обязательно оптимизируйте его . nginx и lighttpd , видимо, являются лучшим выбором с точки зрения производительности, но я не очень часто их использовал и не могу сказать точно.

Что касается базы данных, кеширование запросов и результатов Doctrine творит чудеса, особенно в сочетании с memcached . И, конечно же, мы не можем забыть о начале. Команда исключительной производительности Yahoo собрала обширный список лучших практик . Я не являюсь разработчиком внешнего интерфейса, но я видел потрясающие результаты на сольных проектах.

Наконец, PHP имеет совершенно новый механизм сборки мусора , который стоит изучить.

Безопасность

Мир безопасности PHP хаотичен, если не сказать больше. Я не эксперт, поэтому относитесь к следующим советам:

  • Открытый проект безопасности веб-приложений

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

  • Уязвимости стека

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

Толпа в IT Security Stack Exchange может помочь вам получить более грамотные ответы.

дальнейшее чтение


1
Отличный ответ; отличная презентация; отличная планировка ... Отличная работа!
Динамичный

@Jae Спасибо! Вы прочитали все это? : P Это немного долго, мне было интересно, стоит ли мне это немного подрезать.
Яннис

Ха, я пытался! ;-)
Dynamic

Вообще-то, Яннис, у меня есть к тебе вопрос. Я недавно очень заинтересовался PHP. Я пытался выучить это сам, но у меня немного проблем. Также кажется, что вы довольно хорошо разбираетесь в PHP :-). Не могли бы вы поделиться небольшим руководством? Если так, я создам чат.
Динамичный

Это именно тот ответ, который я искал! Это чертовски много информации, чтобы принять ее, я думаю, что в течение следующего часа мне придется немного поглотить и повозиться, но вы дали мне с чего начать. Спасибо :)
Брэд Моррис

1

На сайте IBM developerWorks есть огромное количество статей по PHP , многие из которых довольно хороши. У них есть серия статей, в которых сравниваются веб-фреймворки PHP , и другая серия о веб-сайтах, использующих фреймворк CakePHP .

На старом сайте О'Рейли "Onlamp" есть статья о MVC на PHP . Автор этой статьи объяснил MVC более подробно .

Статьи О'Рейли немного стары, но они помогут вам. Материал IBM DeveloperWorks действительно хорош и охватывает многое из того, что вы просите.


1

Я работаю над PHP уже несколько лет. Хотя я согласен с Яннисом, что этот вопрос как-то открыт, думаю, я бы дал вам несколько советов. Во-первых, как сказал Яннис, вам следует изучить MVC, для этого я могу порекомендовать две платформы: CodeIgniter и Symfony . Первый из них легкий и с ним очень легко начать работу, однако, вам может потребоваться просто добавить некоторые дополнительные настройки, чтобы получить хорошую настройку, которая скоро появится. Symfony - это проект, начатый Фабьеном Потенсье (Fabien Potencier), который использует многие шаблоны проектирования в разработке программного обеспечения, однако кривая обучения намного круче, чем у CodeIgniter .

Теперь, во-вторых, вы должны взглянуть на соединение с базой данных, которое приводит меня к двум наиболее известным средам ORM для PHP, Doctrine и Propel . Лично я люблю Propel и даже писал о том, как настроить чистую установку Propel в приложении на основе CodeIgniter , однако Symfony больше относится к Doctrine , но давайте использовать один из них. Если вы хотите узнать больше о Doctrine и Propel , взгляните на этот вопрос, который я задал некоторое время назад.

Наконец, вы должны изучить шаблонные рамки, такие как Smarty , Dwoo или Twigg . Smarty - самый старый и, следовательно, самый стабильный. Dwoo наследует от Smarty и добавляет одну или две вещи для лучшей поддержки ООП в PHP 5. Наконец, Twigg - это шаблонная альтернатива, предоставляемая командой Symfony , я сам ее не видел, но если она исходит от команды Symfony, это должно быть приятно .

Надеюсь, что весь этот разговор имеет смысл, Дэвид

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.