Arquitectura / diseño de aplicaciones web PHP [cerrado]

20

Me lanzaron de cabeza a un nuevo trabajo desarrollando aplicaciones web en PHP. De ninguna manera soy nuevo en PHP, pero no he desarrollado aplicaciones a gran escala antes. Me pregunto cómo estructurar mi desarrollo para evitar tener problemas en el futuro. ¿Cómo diseño y diseño mis aplicaciones de una manera sólida que les permita escalar con el tiempo en términos de funcionalidad y rendimiento? Estoy pensando en cosas como:

  • Separar el extremo posterior del extremo frontal
  • Estructuras de directorio

Apreciaría los indicadores sobre los patrones, marcos y métodos de diseño arquitectónico y de aplicaciones que me permiten abordar el desarrollo de aplicaciones web PHP a gran escala de una manera sostenible.

Brad Morris
fuente
¡Hola! La arquitectura más común para aplicaciones web es MVC , para PHP y cualquier otra plataforma web popular. Dicho esto, deberías leer nuestras preguntas frecuentes . Aunque la arquitectura del software es un tema, debe revisar la pregunta para ser un poco más específico. Una "discusión saludable sobre arquitectura general" no se ajusta al formato de preguntas y respuestas del sitio.
Yannis
Soy un visitante frecuente de los Sitios de S / E, tuve la sensación de que no habría una respuesta a esta pregunta, de ahí el comentario de "discusión". Gracias por el puntero MVC :) :)
Brad Morris

Respuestas:

29

Un diagrama aproximado de la arquitectura del último proyecto a gran escala en el que participé.

ingrese la descripción de la imagen aquí

Es solo un esquema básico, adaptado de los documentos de arquitectura reales y presentado de una manera que se asemeja a un enfoque típico de n niveles combinado con un enfoque MVC típico . Como puede ver, la lógica y los niveles de datos están conectados a través de una capa de servicio, y más específicamente una API REST , inspirada en Recess , un marco PHP menos conocido.

No reinventes la rueda

Yo trabajo con tres marcos:

  • Marco Zend

    El gigante de los frameworks PHP, con una base de código impresionantemente bien escrita y una extensa lista de características. En aplicaciones a gran escala, te encontrarás modificando el marco la mayoría de las veces, y creo que la base de código de ZF es la más agradable para trabajar. Pero cuidado, no es un marco de nivel de entrada .

  • Kohana

    Kohana comenzó como un tenedor de CodeIgniter, y esa fue una razón suficiente para que no lo usara, inicialmente. Hoy en día se ha convertido en un marco sólido y elegante que se diferencia de todos los demás siguiendo un enfoque MVC jerárquico . HMVC permite una mayor extensión de modularización que MVC . Para el proyecto en el diagrama, adapté el HMVC de Kohana a ZF, pero comencé a usar Kohana para proyectos más pequeños y a considerarlo también para proyectos más grandes.

  • CodeIgniter

    Solo lo uso debido a un proyecto heredado que heredé, evítalo si es posible.

Como señalaron las otras respuestas, un ORM siempre es útil. Uso Doctrine ampliamente, y deberías echar un vistazo a sus nuevos mapeadores para CouchDB y MongoDB . La escalabilidad es imprescindible en aplicaciones a gran escala y debe evaluar las soluciones NoSQL .

Dicho todo esto, lo importante es recordar que las aplicaciones más grandes generalmente tienen desafíos únicos. Debe evaluar todas las soluciones de terceros populares que existen, y probablemente obtendrá mucho de un par de soluciones oscuras. Cuando evalué Recess por primera vez, estaba lejos de estar listo para la producción, pero su enfoque esencialmente llegó al proyecto.

Actuación

En sitios web típicos, puede salirse con el almacenamiento en caché de salida simple y el almacenamiento en caché de código de operación, pero en las aplicaciones a gran escala realmente debería considerar el almacenamiento en memoria caché, que generalmente se basa en memcached .

xdebug se conoce principalmente como depurador, pero también puede servir como perfilador . Recientemente comencé a usar Zend Server y adoro sus características de rastreo de código . Desafortunadamente, esos no están disponibles en la Edición de comunidad , pero xdebug es una alternativa bastante decente.

Si está utilizando Apache, asegúrese de optimizarlo al máximo . Aparentemente, nginx y lighttpd son mejores opciones , en cuanto al rendimiento, pero no las he usado mucho y realmente no puedo decirlo.

En cuanto a la base de datos, el almacenamiento en caché de consultas y resultados de Doctrine funciona de maravilla, especialmente combinado con memcached . Y, por supuesto, no podemos olvidarnos del frente. El equipo de rendimiento excepcional de Yahoo ha reunido una extensa lista de mejores prácticas . No soy realmente un desarrollador front-end, pero he visto resultados sorprendentes en proyectos en solitario.

Por último, PHP tiene un nuevo mecanismo de recolección de basura , que vale la pena considerar.

Seguridad

El mundo de la seguridad de PHP es caótico, por decir lo menos. No soy un experto, así que trata los siguientes consejos genéricos:

  • Proyecto de seguridad de aplicaciones web abiertas

    Hay muchas cosas buenas allí, pero para una visión general rápida, debe comenzar con la lista de los diez mejores . E investigue las soluciones PHP para esas vulnerabilidades comunes.

  • Apilar vulnerabilidades

    Un buen hábito es monitorear periódicamente los errores abiertos de PHP . Incluso si usted no es un experto, casi siempre hay consejos para solucionar problemas de seguridad. Y, por supuesto, debe extender el hábito a cualquier otra parte de la pila, especialmente a los más vulnerables, como el servidor web y la base de datos.

La multitud en IT Security Stack Exchange puede ayudarlo con respuestas más educadas.

Otras lecturas

Yannis
fuente
1
Gran respuesta; gran presentación; gran diseño ... ¡Buen trabajo!
Dinámico
@Jae Gracias! ¿Lo leíste todo? : P Es un poco largo, me preguntaba si debería podarlo un poco.
Yannis
Ja, lo intenté! ;-)
Dinámico
En realidad Yannis, tengo una pregunta para ti. Recientemente me he interesado mucho con PHP. He estado tratando de aprenderlo yo mismo, pero tengo algunos problemas. También parece que eres bastante bueno con PHP :-). ¿Te importaría compartir un poco de orientación? Si es así, crearé una sala de chat.
Dinámico
¡Esa es exactamente la clase de respuesta que estaba buscando! Es una gran cantidad de información para asimilar, creo que tendré que absorber un poco durante la próxima hora, pero me has dado un lugar para comenzar. Gracias :)
Brad Morris
1

El sitio web de desarrolladores de IBM tiene una gran cantidad de artículos PHP , muchos de ellos bastante buenos. Tienen una serie de artículos que comparan los marcos web PHP y otra serie sobre sitios web que usan el marco CakePHP .

El antiguo sitio web "Onlamp" de O'Reilly tiene un artículo sobre MVC en PHP . El autor de ese artículo continuó explicando MVC con cierto detalle .

Los artículos de O'Reilly son un poco viejos, pero te ayudarán. El material de IBM Developerworks es realmente bueno y cubre mucho de lo que está pidiendo.

Bruce Ediger
fuente
1

Llevo unos años trabajando en PHP. Aunque estoy de acuerdo con Yannis en que esta pregunta está abierta de alguna manera, creo que te daré algunos consejos. Primero, como dijo Yannis, yu debe mirar en MVC, para hacerlo, los dos marcos que puedo recomendar son CodeIgniter y Symfony . El primero es liviano y muy fácil de comenzar, sin embargo, es posible que solo necesite agregar algunas personalizaciones adicionales para que una configuración agradable funcione, pronto lo hará. Symfony es un proyecto iniciado por Fabien Potencier que utiliza muchos de los patrones de diseño en ingeniería de software, sin embargo, la curva de aprendizaje es mucho más pronunciada que la de CodeIgniter .

Ahora, en segundo lugar, debe buscar en la conexión de la base de datos, lo que me lleva a los dos marcos ORM más destacados para PHP, Doctrine y Propel . Personalmente, amo Propel e incluso escribí sobre cómo configurar una instalación limpia de Propel en una aplicación basada en CodeIgniter , sin embargo, Symfony está más metido en Doctrine , pero vamos a usar cualquiera de ellos. Si desea consultar un poco más sobre Doctrine y Propel , eche un vistazo a esta pregunta que hice hace algún tiempo.

Finalmente, debe buscar un marco de plantillas, como Smarty , Dwoo o Twigg . Smarty es el más antiguo y, por lo tanto, el más estable. Dwoo hereda de Smarty y agrega una o dos cosas para admitir mejor la POO en PHP 5. Finalmente, Twigg es la alternativa de plantilla proporcionada por el equipo de Symfony , no lo he visto yo mismo, pero si proviene del equipo de Symfony , sería bueno .

Espero que todo este discurso tenga algún sentido, David

David Conde
fuente