Подтвердить что ты не робот

Какие шаблоны проектирования/дизайна PHP-приложений вы используете?

Поделитесь своими любимыми шаблонами дизайна/дизайна приложения для использования со мной в PHP. Некоторые вещи, которые я хотел бы знать:

  • Как создаются ваши папки.
  • Как вы используете oritentation объекта в своих PHP-приложениях
  • Есть ли у вас стандартный способ борьбы с CRUD, разбиением на страницы или любыми другими общими задачами?
  • Как избежать использования повторяющегося кода? Каков ваш подход к библиотекам/общий код и т.д.?
  • Какими способами вы можете сделать свой код более элегантным?

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

Причина, по которой я прошу об этом, заключается в том, что я очень устал писать повторяющийся, уродливый код на PHP, и я хочу создать небольшую основу для моих проектов фриланса, которые облегчат программирование и позволят мне сосредоточиться на сложных/бизнес-задачи, а не проверку формы, разбиение на страницы и другие мирские действия, которые составляют 80% работы программирования в PHP

Все мнения оценены!

4b9b3361

Ответ 1

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

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

Если вы решите опрокинуть свои собственные, вот несколько вещей, которые я бы рекомендовал по собственному опыту:

  • Сделать безопасность Ваш главный приоритет - Если вы пишете уровень доступа к данным, используйте связанных параметров. Если вы напишете форму класс, защита от CSRF и XSS. Поймите свои исключения и обработайте свои ошибки. Убедитесь, что ваш PHP среда безопасна. Не пытайтесь придумать собственное шифрование алгоритм. Если вы не концентрируетесь по безопасности, не стоит писать ваши собственные рамки.
  • Комментировать код. Вам понадобится комментарии, чтобы помочь вам запомнить, как ваш код работает через некоторое время. я обычно обнаруживают, что комментарии докблока более чем достаточно. За гранью этого, комментарий, почему вы что-то сделали, а не что ты сделал. Если вам нужно объяснить что, вы можете захотеть реорганизовать.
  • Отдельные классы ответственности и Методы. Большинство ваших классов и методы должны делать одно и только одна вещь. Особенно следите за это с базой данных - Your класс разбивки на страницы не должен опираться ваш объект доступа к данным, а также почти любой другой (низкоуровневый) класс.
  • Unit Test. Если каждый из ваших методов делает только одно, оно должно быть далеко их легче протестировать, и это будет привести к улучшению кода. Напишите тест сначала, затем код для передачи контрольная работа. Это также даст вам больше свобода реорганизации позже без сломать что-то.
  • Абстрактные аналогичные классы. Если вы имеют более одного класса, который делает аналогичные вещи, создать родительский класс который использует сходства между классов и расширить его.
  • Делегировать и модулировать. Если вы написание системы валидации (и скорее всего, вы захотите), не включайте каждый валидатор в качестве метод в некоторой супер-валидации класс. Разделите их на отдельные классы и назовите их по мере необходимости. Эта может применяться во многих областях: фильтры, языки, алгоритмы, валидаторы и т.д.
  • Защита и приватизация. В большинстве случаев, лучше использовать геттер и методы установки, а не прямой доступ к переменным класса.
  • Согласованный API. Если у вас есть render() и метод draw() которые делают то же самое в разных классы, выбрать один и пойти с ним по всем классам. Сохраняйте порядок параметры одинаковы для методов которые используют одни и те же параметры. Согласованный API - это более простой API.
  • Запомнить автозагрузку - класс имена могут стать немного неуклюжими и долго, но то, как Zend называет классы и организует каталоги упрощает автозагрузку. Обновление. Начиная с PHP 5.3, вы должны начать использовать пространства имен.
  • Никогда не эхо или ничего не печатайте - Дайте это как возвращаемое значение и позволяет пользователю решить, следует ли его повторять. Много раз вы будете использовать возвращаемое значение как параметр для другого метода.
  • Не пытайтесь решить Проблемы. Решите свое первое. Если вам не нужна функция прямо сейчас, как класс для локализации чисел или даты или валюты, не пишите. Подождите, пока вам это не понадобится.
  • Не преоптимизировать. Создайте несколько простые приложения с перед его тонкой настройкой. В противном случае вы можете потратить много время ни на что продуктивное.
  • Использовать контроль источника. Если вы потратите бесчисленные часы создают шедевр, не рискуйте получить потеряны.

Ответ 2

Я должен согласиться с вышеупомянутыми плакатами. Если вы не используете фреймворк при программировании на 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 вопроса, на которые я не ответил, в значительной степени подразумеваются при использовании фреймворка)

Ответ 3

Я полагаю, что многие разработчики php следовали аналогичному пути к моим: маленькие скрипты → процедурный/встроенный код → возможно, посмотрите на templating → OOP → , затем на фреймворк. Я думаю, что PHP-разработчик может "повзрослевать" с PHP, изучая шаблоны проектирования, чтобы соответствовать функциям, доступным в текущей версии.

MVC является наиболее часто используемым шаблоном проектирования в популярных системах, используемых сегодня. CakePHP - моя выборка, хотя Symphony и Zend тоже очень популярны - стоит попробовать несколько, и вскоре станет очевидно, с кем вам будет удобно.

Для большинства проектов (где быстрое развитие и переносимый код являются приоритетами) я использую Cake, однако для приложений с небольшим весом (один из которых я недавно разработал Good Baad), что вы хотели бы работать быстро (на аппаратах с низким спектром) и не нуждаетесь в объеме/весе, добавленном функциональностью одной из больших фреймворков, которые я рекомендую прочитать статью Расмуса Лердорфа на его Нет Framework Framework PHP MVC.

В принципе, если вы после истинного объектно-ориентированного языка, который поощряет красивый код и лучшие методы проектирования, PHP всегда будет проигрывать подобным Ruby Python и С#. Но у PHP есть свои сильные стороны, например. нет необходимости в языке шаблонов (это один), PHP может работать очень быстро и дешево и не нуждается в весе большой структуры для всех приложений.

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

Ответ 4

Я почти чувствую себя сломанной записью, но я бы рекомендовал вам взглянуть на некоторые общие рамки по двум причинам:

  • Даже если вы решите не использовать один, некоторые из них очень хорошо написаны и очень хорошо разработаны. Мне особенно нравится Zend Framework, но я вернусь к этому через секунду.
  • Спросите себя, почему вы изобретаете колесо. Вы действительно чувствуете, что понимаете те же проблемы с дизайном, с которыми все остальные сталкиваются намного лучше, чем сообщество (вставить рамки выбора здесь), чтобы оправдать написанное что-то с нуля? Выступая в качестве одного из тех, кто первоначально смотрел на несколько рамок и решил, что они слишком большие, слишком много излагает кривую обучения или слишком много накладных расходов и так развивается, я могу сказать, что писать свои собственные с нуля - большая боль, если вы может просто использовать существующую, которая может быть легко расширена.

Говоря об использовании рамки, которая может быть легко расширена, у меня был очень положительный опыт работы с Zend Framework. Это сплоченная и все же слабосвязанная структура позволяет быстро и легко расширить любой существующий компонент, а вся инфраструктура разработана вокруг идеи, что вам нужно будет написать свои собственные классы-помощники и плагины, чтобы добавить к своей общей функциональности.

Я обнаружил, что Zend Framework настолько полностью гибкая, что я запускаю один веб-сайт как часть Zend Framework MVC и часть моей старой дерьмовой структуры и даже более старого кода crappier, который я еще не переписал. Фактически, поскольку во время нашей перезаписи мы обнаружили, что одна страница, которая работает неприемлемо медленной, используя старую структуру, я переключил одну страницу для работы под архитектурой Zend Framework.

Чтобы ответить на некоторые ваши вопросы, я бы рекомендовал вам изучить шаблоны архитектуры корпоративных приложений Мартина Фаулера. Он дает много полезной информации о том, как решить ряд таких распространенных проблем, как создать слой взаимодействия с базой данных в приложении. Фаулер также охватывает такие темы, как MVC и Front Page Controller.

Ответ 5

Я объяснил большую часть моей методологии PHP здесь.

но в настоящее время я просто использую Django везде, где могу.

Ответ 6

Я начал с smarty templating engine, когда мне сначала надоело смешивать код и html. После хакинга какое-то время я понял, что писать собственные рамки - это просто дублирование работы.

Я сделал несколько проектов с Joomla, который действительно является CMS, но он дает клиентам большой контроль над контентом.

В конечном итоге я решил использовать реальные рамки для своих проектов. Я использую symfony, который вдохновлен Rails и очень хорошо документирован, но я слышал cakePHP и ZendFramework тоже очень хороши.

Ответ 7

Я использую Zend Framework, которая в значительной степени определяет расположение папок и OOP (парадигма MVC). Для обычных задач, например, для разбивки на страницы, я использую Zend_Paginator (мои модели классов реализуют Zend_Paginator_Adapter_Interface), для проверки я использую классы Zend_Validate и т.д. Благодаря этому я могу полностью сконцентрироваться на бизнес-логике вместо того, чтобы изобретать колесо.

Ответ 8

Использование 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, i.e. doctrine-cli)
  vendor           (zend and doctrine libraries, preferably as svn-externals)

Ответ 9

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

И затем приходит часть, где я прихожу к осознанию того, что я делаю что-то правильно.

И как таковой я отказался от написания своего собственного любимого толпы: Zend.

Я смотрел на других, но кажется, что Зенд был вокруг, и они знают свои вещи.

MVC - это также способ, которым я буду идти вперед с тем, что я пишу сейчас.