Пожалуйста, поделитесь своими любимыми шаблонами / шаблонами проектирования для использования со мной в PHP. Некоторые вещи, которые я хотел бы знать:
Вам не обязательно отвечать на все эти вопросы, ответ на любой или несколько из них будет полезен.
Причина, по которой я прошу об этом, заключается в том, что я очень устал писать повторяющийся, уродливый код на PHP, и я хочу создать небольшую основу для своих проектов фриланса, которые облегчат программирование и позволят мне сосредоточиться на сложных задачах вместо проверки формы, разбивки на страницы и других мирских действий, составляющих 80% работы программирования в PHP
Все мнения оценены!
Я мог бы проголосовать за это, но если вы действительно хотите написать свою собственную фреймворк, я говорю, иди за ней, потому что ты многому научишься от этого опыта. Другие рамки, упомянутые здесь, являются отличными и проверенными, и вы не будете принимать плохие решения, используя их, но это ваш выбор.
Прежде чем приступить к написанию фреймворка, посмотрите на другие структуры (по их синтаксису, структуре каталогов, схеме именования, шаблонам проектирования и т. Д.) И попытайтесь выяснить, почему они сделали то, что они сделали, и что бы вы сделали по-другому. Попробуйте несколько уроков и поиграйте с их кодом, создайте несколько примеров приложений. Если после этого вам не нравится их использовать, тогда идите и начните планирование своей структуры, сохранив то, что сработало и улучшило то, чего не было.
Если вы решите бросить свои собственные, вот несколько вещей, которые я бы рекомендовал по собственному опыту:
Я должен согласиться с вышеупомянутыми плакатами. Если вы не используете фреймворк при программировании на PHP, вы действительно программируете руками, связанными за спиной. Я лично рекомендую CodeIgniter . Это самая быстрая структура, она очень проста в обучении и имеет очень активное сообщество. На все ваши вопросы ответят рамки:
* How your folders are designed
CodeIgniter (или любая инфраструктура в этом отношении) отделяет вашу логику от представлений, моделей и контроллеров, каждая из которых имеет свою собственную папку.
* Do you have a standard way of dealing with CRUD, pagination, or any other common tasks?
CI имеет библиотеку разбиения на страницы, и у нее есть сторонние библиотеки, такие как DataMapper для обертывания вызовов CRUD объектно-ориентированным способом (ORM).
* What are ways in which you can make your code more elegant?
Разделение модели, представления и контроллера делает очень элегантный код.
(2 вопроса, на которые я не ответил, в значительной степени подразумеваются при использовании фреймворка)
Я предполагаю, что многие разработчики php следовали аналогичному маршруту: мои скрипты -> процедурный / встроенный код -> возможно, посмотрите на templating -> OOP -> затем фреймворк. Я думаю, что разработчик PHP может довольно часто «взрослевать» с PHP, изучая шаблоны проектирования, чтобы соответствовать функциям, доступным в текущей версии.
MVC является наиболее часто используемым шаблоном проектирования в популярных системах, используемых сегодня. CakePHP – моя выборка, хотя симфония и Zend тоже очень популярны – стоит попробовать несколько, и вскоре станет очевидно, с чем вы чувствуете себя наиболее комфортно.
Для большинства проектов (где быстрое развитие и переносимый код являются приоритетами) я использую Cake, однако для приложений с небольшим весом (один из которых я недавно разработал Good Baad ), который вы хотели бы быстро запускать (на оборудовании с низким спектром) и не нуждаетесь объем / вес, добавленный функциональностью одной из больших фреймворков, я рекомендую прочитать статью Расмуса Лердорфа о своей инфраструктуре No Framework PHP MVC .
В принципе, если вы после истинного объектно-ориентированного языка, который поощряет красивый код и лучшие методы проектирования, PHP всегда будет проигрывать подобным Ruby Python и C #. Но у PHP есть свои сильные стороны, например, нет необходимости в языке шаблонов (он один), PHP может работать очень быстро и дешево и не нуждается в весе большой структуры для всех приложений.
Я бы рекомендовал использовать шаблон дизайна, который управляет управляющим шаблоном проектирования, подобным MVC, и сочетает его с сильными сторонами PHP.
Я почти чувствую себя сломанной записью, но я бы рекомендовал вам взглянуть на некоторые общие рамки по двум причинам:
Говоря об использовании структуры, которая может быть легко расширена, у меня был очень позитивный опыт работы с Zend Framework. Это сплоченная и вместе с тем слабосвязанная структура позволяет быстро и легко расширить любой существующий компонент, а вся инфраструктура разработана вокруг идеи, что вам нужно будет написать свои собственные классы-помощники и плагины, чтобы добавить к своей общей функциональности.
Я обнаружил, что Zend Framework настолько полностью гибкая, что я запускаю один веб-сайт как часть Zend Framework MVC, а также часть моей старой дерьмовой структуры и даже более старого кода crappier, который я еще не переписал. Фактически, поскольку во время нашей перезаписи мы обнаружили одну страницу, которая была неприемлемо медленной с использованием старой структуры, я включил одну страницу для работы под архитектурой Zend Framework.
Чтобы ответить на некоторые из ваших вопросов, я бы рекомендовал вам изучить шаблоны архитектуры корпоративных приложений Мартина Фаулера. Он дает много полезной информации о том, как решить ряд таких распространенных проблем, как создать слой взаимодействия с базой данных в приложении. Фаулер также охватывает такие темы, как MVC и Front Page Controller.
Я объяснил большую часть моей методологии PHP здесь .
но в настоящее время я просто использую Django везде, где могу.
Я начал работать с моделями шаблонов шаблонов, когда мне сначала надоело смешивать код и html. После хакинга какое-то время я понял, что писать собственные рамки – это просто дублирование работы.
Я сделал несколько проектов с Joomla , который действительно является CMS, но он дает клиентам большой контроль над контентом.
В конечном итоге я решил использовать реальные рамки для своих проектов. Я использую symfony , который вдохновлен Rails и очень хорошо документирован, но я слышал, что cakePHP и ZendFramework также очень хороши.
Я использую Zend Framework, который в значительной степени определяет расположение папок и OOP (парадигма MVC). Для обычных задач, например, для разбивки на страницы, я использую Zend_Paginator
(мои классы модели реализуют Zend_Paginator_Adapter_Interface
), для проверки я использую классы Zend_Validate
и т. Д. Благодаря этому я могу полностью сконцентрироваться на бизнес-логике, а не изобретать колесо.
Используя Zend Framework и Doctrine , моя структура папок обычно выглядит так:
root app config (db config, routing config, misc config) doctrine (fixtures, migrations, generated stuff, etc) lib logs models (doctrine models) modules (zend mvc modules) bootstrap.php docs (db diagrams, specs, coding standards, various docs) pub (web root) tests tools (console tools, ie doctrine-cli) vendor (zend and doctrine libraries, preferably as svn-externals)
Я уже некоторое время собираюсь писать свои собственные вещи, и каждый раз, когда я никогда не смогу закончить его полностью, потому что я застрял на чем-то.
И затем приходит часть, где я прихожу к осознанию того, что я делаю что-то правильно.
И как таковой я отказался от написания своего собственного фильма с любимой толпой: Zend.
Я смотрел на других, но кажется, что Зенд был вокруг, и они знают свои вещи.
MVC также является тем, как я продвигаюсь вперед с тем, что я пишу сейчас.