2009-04-18 12 views
22

Estoy buscando principalmente buenas prácticas de desarrollo, especialmente cuando se trabaja en conjunto con mysql. Busqué las preguntas pero no pude encontrar ninguna pregunta relacionada. Agradecería que alguien compartiera sus prácticas y sabiduría adquiridas a través de la experiencia.¿Cuáles son algunos de los mejores patrones y prácticas para el desarrollo de PHP?

Aparte de algunos estándares de codificación, yo también busco las normas de diseño y prácticas arquitectónicas comunes.

Antecedentes: Empecé mi carrera con Java, y con los años que se trasladó a C#/espacio NET.. He sido arquitecto practicante durante más de 3 años. Solo agregué esto para darles una idea a la gente.

Respuesta

26

Yo sugeriría que se familiarice con la historia de PHP, sé que al hacerlo me ha dado una apreciación mucho mayor de lo que PHP es hoy en día y donde ha venido.

En resumen, PHP fue escrito por Rasmus Lerdorf para proporcionar funciones simples de envoltura para el código C que en realidad estaba haciendo el trabajo pesado para poder tener un lenguaje/sintaxis más simple para escribir plantillas que necesitaban comportarse dinámicamente. El crecimiento de PHP y la comunidad que lo rodea se describe mejor como orgánico. Y al igual que otras cosas que crecen orgánicamente, es más que un poco desordenado, asimétrico y francamente no congruente.

Una vez que entienda PHP y su comunidad, es necesario abrazar PHP para todo lo que es y todo lo que no lo es. Esta idea fue mejor presentada por Terry Chay en su artículo PHP without PHP.Está hablando específicamente sobre el concepto de almacenamiento en caché funky, pero captura el concepto de codificación de PHP como si fuera PHP y no (inserte el idioma favorito aquí) mejor que nadie que haya visto. En otras palabras, no trates de convertir PHP en Java, C#, Ruby, etc. porque si lo haces fracasarás y odiarás tu vida.

Tome un vistazo a How is PHP Done the Right Way?.

hay que decir que usted debe primero, último, y siempre evitar la tendencia de la mayoría de los desarrolladores de PHP que comienzan a utilizar el anti-patrón de spaghetti-código. En otras palabras, si encuentra que está escribiendo código que contiene consultas sql, manipulación de datos, validación de datos y salida html todo en un solo script php, entonces lo está haciendo mal.

Con el fin de evitar esto, será útil para aprender algo acerca de la naturaleza de los patrones de diseño orientado a la web. Esto, por supuesto, impide familiarizarse con la programación orientada a objetos. Pero una vez que haya aprendido los conceptos básicos de la programación orientada a objetos en PHP, estudie el patrón de diseño MVC. No tiene que implementar esto exactamente, pero usar las ideas básicas de Model-View-Controller le permitirá evitar el problema del script de blob que la mayoría de los novatos tienden a crear.

En este punto, yo recomendaría encarecidamente que se tome cualquier fragmentos de código que encontrará en la web con un grano de sal. E incluso si lo encuentras en un libro, deberás considerar la antigüedad del libro. PHP como lenguaje ha avanzado bastante y no puede tomar muestras de código a su valor nominal porque, dependiendo de su edad, pueden estar utilizando soluciones alternativas que eran válidas en 3.x o 4.x pero que simplemente ya no son necesario con nuevas características.

Una gran cosa que hay que hacer es estudiar los distintos frameworks que existen. Evalúa lo que te gusta y lo que no. Tal vez incluso trabaje en cada uno de los inicios rápidos que se proporcionan con la documentación del marco para que pueda comenzar a tener una idea de lo que le gusta y lo que no le gusta. Y le recomiendo encarecidamente que revise el código de los marcos, así como otros muchos proyectos de código abierto para que pueda hacerse una idea de cómo otros hacen cosas en PHP. De nuevo, tómenlo todo con un grano de sal porque cada desarrollador de PHP tiene sus propios manías y sus propios matices y ninguno de nosotros tiene razón todo el tiempo. De hecho, la mayor parte del tiempo con PHP habrá varias formas bastante buenas de hacer algo.

Si desea obtener una mejor comprensión de los patrones que están siendo implementados por los marcos y son comúnmente lanzados en la lengua vernácula común en SO, sugiero que lea Fowler y GoF. Enseñarán todo sobre los patrones básicos de diseño que usará en sus esfuerzos de desarrollo.

ver Específicamente para lo siguiente: archivos

  • de función que contienen gran cantidad de funciones. Esto probablemente sea representativo de la necesidad de poner funciones directamente en las secuencias de comandos que las necesitan o también puede indicar una oportunidad para crear algunas funciones más genéricas que se pueden realizar para cumplir las funciones de un par de funciones altamente específicas. Por supuesto, si está creando clases coherentes y bien encapsuladas, no debería encontrarse con este problema.
  • La clase de hacer todo. Este es un blob anti-patrón y es realmente desagradable. En este caso, debe identificar dónde se descomponen la cohesión y la encapsulación y utilizar esos puntos como oportunidades para dividir la clase en varias clases más pequeñas y más fáciles de mantener.
  • Consultas SQL que no usan consultas parametrizadas o al menos escapan parámetros. Muy, muy, muy mal.
  • Cualquier instancia donde la validación no se está realizando o solo se realiza en el lado del cliente.Al desarrollar para la web, la única forma de mantener la seguridad de su sitio y de sus usuarios es suponer que todos los demás son un sombrero negro.
  • Un deseo repentino y obsesivo de utilizar un motor de plantillas. PHP es un lenguaje de plantillas. Asegúrese de tener razones claras para agregar otra capa en su sitio web antes de usar un motor de plantillas.

Para la lectura adicional por favor, mira el siguiente:

PHP Application Design Patterns
Defend PHP - útil para darle una idea de las críticas más comunes.
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

Me gusta cómo advierte para los motores de plantilla. Nunca entendí por qué las personas lanzaban un motor de plantillas a un lenguaje que se diseñó como un lenguaje de plantilla. –

+0

Hola Gabriel, Gracias por la respuesta detallada. Realmente aprecio tu forma de pensar Estoy muy familiarizado con todos los patrones de diseño. Comencé mi carrera en Java y luego me mudé a C# y ASP.NET World. He utilizado la mayoría de los patrones de diseño cuando corresponde. Ahora, como arquitecto, quiero poner en práctica algunas buenas prácticas y metodologías de codificación, ya que tengo algunas aplicaciones de php junto con las aplicaciones .net. No quiero imponer las mismas restricciones en PHP por las razones que mencionaste anteriormente. –

+0

, ¿estás diciendo que usar plantillas como SMARTY es solo una pérdida de tiempo y energía? –

10
  • Utilice un estándar de codificación.
  • Utilice pruebas unitarias. PHPUnit y SimpleTest son los principales sistemas xUnit en PHP.
  • Sea orientado a objetos.
  • Utilice el control de versiones. Cualquier control de versión, solo úsalo.
  • Si corresponde, utilice un marco. Zend, CodeIgniter, Symfony y CakePHP son los principales.
  • Si no hay marco, al menos use un ORM. Propel y Doctrine son los principales.
  • Documento. Fuertemente. Use PHPdoc o similar.

Existe una gran cantidad de herramientas para PHP. Úselos y escriba un buen código de mantenimiento. Harás que todos sean más felices.

3

Use PDO o mysqli. Usar uno de estos le dará declaraciones preparadas, que son más seguras y eficientes. No puedo creer cuántos ejemplos y tutoriales veo usando las antiguas interfaces mysql. PDO también haría que sea mucho más fácil cambiar a un sistema de base de datos diferente, en caso de que decida probar postgres, por ejemplo.

Usted puede mirar en el uso Doctrina (http://www.doctrine-project.org). Tiene un poco de su propia curva de aprendizaje, pero proporciona una funcionalidad muy conveniente. Las partes más útiles, para mí, son las funciones de creación de tabla/carga de datos de prueba. Personalmente, prefiero escribir mi propio SQL y ejecutarlo con PDO, y no usar mucho ORM en producción.

Principalmente, aprenda sobre SQL y MySQL. http://www.kitebird.com/mysql-book/ este libro es excelente. El aspecto de PHP no es muy intenso; PDO se encarga de la mayor parte.

0

Su partir de un fondo de Java, y gran parte de la materia OO en PHP es muy Javaesque. Esto significa que muchos de los patrones de diseño que (con suerte) aprendió en Java también se aplican (en menor medida) en PHP. Un ejemplo de acceso a la base de datos sería el patrón DataMapper.

Cuestiones relacionadas