Меня увлекли новой работой по разработке веб-приложений на PHP. Я ни в коем случае не новичок в PHP, но я никогда не разрабатывал крупномасштабных приложений. Мне интересно, как структурировать свое развитие, чтобы не создавать себе проблемы в будущем. Как я проектирую и проектирую свои приложения таким образом, чтобы они со временем масштабировались с точки зрения функциональности и производительности. Я думаю о таких вещах, как:
- Отделение задней части от передней части
- Структура каталогов
Я был бы признателен за указатели на шаблоны архитектуры и приложений, инфраструктуры и методы, которые позволяют мне устойчиво подходить к разработке крупномасштабных веб-приложений на PHP.
web-development
design
php
architecture
Брэд Моррис
источник
источник
Ответы:
Грубая схема архитектуры последнего крупномасштабного проекта, в котором я участвовал.
Это только базовая схема, адаптированная из фактических архитектурных документов и представленная способом, который напоминает типичный 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 может помочь вам получить более грамотные ответы.
дальнейшее чтение
источник
На сайте IBM developerWorks есть огромное количество статей по PHP , многие из которых довольно хороши. У них есть серия статей, в которых сравниваются веб-фреймворки PHP , и другая серия о веб-сайтах, использующих фреймворк CakePHP .
На старом сайте О'Рейли "Onlamp" есть статья о MVC на PHP . Автор этой статьи объяснил MVC более подробно .
Статьи О'Рейли немного стары, но они помогут вам. Материал IBM DeveloperWorks действительно хорош и охватывает многое из того, что вы просите.
источник
Я работаю над 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, это должно быть приятно .
Надеюсь, что весь этот разговор имеет смысл, Дэвид
источник