2009-04-18 4 views
22

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

Помимо некоторых стандартов кодирования, я также ищу стандарты проектирования и общие архитектурные практики.

Предыстория: Я начал свою карьеру с Java, и за эти годы я перешел на C# /. NET пространство. Я занимаюсь архитектурой уже более 3 лет. Просто добавьте это, чтобы дать людям некоторое представление.

ответ

26

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

Вкратце, PHP был написан Rasmus Lerdorf для предоставления простых функций обертки для кода C, который фактически выполнял тяжелый подъем, чтобы он мог иметь более простой язык/синтаксис для написания шаблонов, которые должны вести себя динамически. Рост PHP и сообщества, который его окружает, лучше всего назвать органическим. И, как и другие вещи, которые растут органично, его больше, чем немного грязный, асимметричный и совершенно неконкурентный.

Как только вы понимаете PHP и его сообщество, вам нужно охватить PHP для всего, что есть, и всего, что это не так. Эта идея была лучше всего представлена ​​Терри Чай в его статье PHP without PHP.Он специально говорит о концепции фанкового кэширования, но он фиксирует концепцию кодирования для PHP, как если бы он был PHP, а не (вставлять любимый язык здесь) лучше, чем кто-либо, кого я когда-либо видел. Другими словами, не пытайтесь сделать PHP на Java, C#, Ruby и т. Д., Потому что если вы это сделаете, вы потерпите неудачу, и вы будете ненавидеть свою жизнь.

Посмотрите на How is PHP Done the Right Way?.

Должен сказать, что вы должны первыми, последними и всегда избегать склонности большинства начинающих разработчиков PHP использовать анти-шаблон спагетти-кода. Другими словами, если вы обнаружите, что вы пишете код, содержащий sql-запросы, манипулирование данными, проверку данных и вывод html всего в одном скрипте php, тогда вы делаете это неправильно.

Чтобы избежать этого, полезно узнать что-то о природе веб-ориентированных шаблонов проектирования. Это, конечно, исключает знакомство с объектно-ориентированным программированием. Но как только вы узнаете основы объектно-ориентированного программирования в PHP, изучите шаблон проектирования MVC. Вам не нужно реализовывать это точно, но использование основных идей Model-View-Controller позволит вам избежать проблемы с сценарием blob, которую обычно создают большинство новичков.

В этой связи я настоятельно рекомендую вам использовать любые фрагменты кода, которые вы найдете в Интернете, с солью. И даже если вы найдете его в книге, вам придется подумать о том, сколько лет книга. PHP как язык продвинулся довольно долго, и вы не можете просто взять образцы кода по номиналу, потому что, в зависимости от их возраста, они могут использовать обходные методы, которые были действительны в 3.x или 4.x, но просто больше не необходимо с новыми функциями.

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

Если вы хотите получить лучшее представление о шаблонах, которые реализуются в рамках каркасов, и их обычно вызывают в обычном языке на SO, я бы предложил вам прочитать Fowler и GoF. Они расскажут об основных шаблонах дизайна, которые вы будете использовать в своих усилиях по развитию.

Конкретно смотреть следующее:

  • Функциональные файлы, которые содержат много функций. Это, скорее всего, является репрезентативной необходимостью либо помещать функции непосредственно в нужные им сценарии, либо может указывать на возможность создания еще нескольких общих функций, которые могут быть выполнены для выполнения функций нескольких высокоспецифических функций. Конечно, если вы строите сплоченные, хорошо инкапсулированные классы, вы не должны сталкиваться с этой проблемой.
  • Делают все классы. Это анти-шаблон blob и действительно противный. В этом случае вам нужно определить, где ломаются сплоченность и инкапсуляция, и использовать эти точки как возможность разбить класс на несколько меньших, более обслуживаемых классов.
  • SQL-запросы, которые не используют параметризованные запросы или, по крайней мере, экранированные параметры. Очень, очень, очень плохо.
  • Любой экземпляр, если проверка не выполняется или выполняется только на стороне клиента.При разработке для Интернета единственный способ сохранить безопасность вашего сайта и ваших пользователей - предположить, что все остальные - черная шляпа.
  • Внезапное навязчивое желание использовать шаблонный движок. PHP - это язык шаблонов. Убедитесь, что у вас есть четкие причины добавления другого слоя на ваш сайт перед использованием механизма шаблонов.

Для дальнейшего чтения, пожалуйста, смотрите на следующее:

PHP Application Design Patterns
Defend PHP - полезно, чтобы дать вам представление о наиболее распространенных критических замечаний.
Security of strip_tags and mysqlirealescapestring
What should Every PHP Programmer Know
How to Structure an ORM
Best Way to Organize Class Hierarchy
Main Components/Layers of PHP App
Why use Framework for PHP
Recommended Security Training for PHP

+1

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

+0

Привет, Габриэль, Спасибо за подробный ответ. Я очень ценю ваше мнение. Я очень хорошо знаком со всеми шаблонами дизайна. Я начал свою карьеру с Java, а затем перешел в C# и ASP.NET. Я использовал большую часть шаблонов дизайна, где это необходимо. Теперь, будучи архитектором, я хочу применить некоторые хорошие практики и методики кодирования, поскольку у меня есть некоторые приложения php вместе с приложениями .net. Я не хочу накладывать те же ограничения на PHP по причинам, о которых вы говорили выше. –

+0

так вы говорите, что использование шаблонов, таких как SMARTY, просто пустая трата времени и энергии? –

10
  • Использовать стандарт кодирования.
  • Используйте модульное тестирование. PHPUnit и SimpleTest являются основными системами xUnit в PHP.
  • Be объект предназначенный.
  • Используйте контроль версий. Любой контроль версий, просто используйте его.
  • Если применимо, используйте рамки. Zend, CodeIgniter, Symfony и CakePHP являются основными.
  • Если нет рамки, по крайней мере используйте ORM. Propel и Doctrine являются основными.
  • Документ. Крупный. Используйте PHPdoc или аналогичный.

Существует множество инструментов для PHP. Пожалуйста, используйте их и напишите хороший код. Вы сделаете всех счастливее.

3

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

Вы можете изучить Doctrine (http://www.doctrine-project.org). У этого есть немного его собственной кривой обучения, но обеспечивает очень удобную функциональность. Самые удобные для меня компоненты - это функции загрузки/тестирования данных таблицы. Лично я предпочитаю писать свой собственный SQL и выполнять его с PDO, а не использовать ORM в производстве.

Главным образом, узнайте о SQL и MySQL. http://www.kitebird.com/mysql-book/ эта книга отличная. Аспект PHP не очень интенсивный; PDO заботится о большей части этого.

0

Ваш из фона Java, и большая часть ОО вещи в PHP очень Javaesque. Это означает, что многие шаблоны проектирования, которые вы (надеюсь) выучили на Java, также применяются (в меньшей степени) в PHP. Примером для доступа к базе данных будет шаблон DataMapper.