Planteaste una pregunta muy interesante y fundamental. La pregunta sobre la arquitectura del proyecto a gran escala y la organización de la estructura de carpetas (que es secundaria a la arquitectura).
Hoy, el enfoque más común para construir la arquitectura del marco CMS es el uso del patrón MVC. Hay algunos buenos artículos sobre cómo crear sus propios frameworks MVC, uno de ellos es Build an MVC Framework with PHP .
MVC significa Modelo, Vista, Controlador. Puede llamar a estos enfoques lo que quiera: MVC, HMVC, MVP. La esencia es aislar los componentes individuales de su sistema. El "Controlador" recupera los datos del "Modelo" y los envía a "Ver", que representa el HTML final. Ya ha implementado la "V" en su contacts.php
y "MC" en su contacts_class.php
. Entonces ha aislado la vista del modelo y el controlador. Ahora puede cambiar fácilmente su "Vista" dejando otras partes intactas.
No te estoy sugiriendo que sigas ciegamente el MVC, MVP o cualquier otro patrón "MV". Es cuestión de adecuación, eficacia y sabor.
La aplicación de sitio web dinámico común puede incluir componentes como:
- El punto de entrada, digamos
index.php
- Las bibliotecas / clases auxiliares
- El enrutador de solicitud
- Los módulos, componentes o controladores.
- El motor de plantillas o quizás vistas individuales
La aplicación web real puede incluir cualquier otro componente como controladores de eventos, despachadores de eventos y enlaces, pero de hecho son matices. Bueno, permítanme presentarlo de la forma en que quiero presentarlo:
La rutina de operación de marco común de la siguiente manera:
- La solicitud del navegador se envía directamente al punto de entrada ejecutable / script (
index.php
).
- El script de punto de entrada carga las bibliotecas auxiliares, las clases y realiza una inicialización adicional de nuestro entorno de programación.
- La URL se pasa a la instancia del enrutador de solicitud. Este paso puede ser parte del paso 2.
- El enrutador de solicitud analiza la URL y envía la operación a un componente, módulo o controlador en particular.
- El componente (o controlador) procesa la solicitud enrutada y envía los datos a la vista que se representará.
La estructura de carpetas del proyecto correspondiente se muestra en el diagrama.
Le sugiero que investigue cómo se implementan los otros marcos. Los CMS / frameworks recomendados para comenzar son CodeIgniter, OpenCart, Joomla 1.5 y Tango CMS.
Para tener una idea de qué preguntas hacer y qué soluciones están disponibles, recomiendo el libro Patrones de arquitectura de aplicaciones empresariales de Martin Fowler. Puedes hacerte una idea de lo que hay en el libro leyendo su sitio web
Tenga en cuenta que el libro ya es bastante antiguo (en TI), pero muchos principios siguen siendo válidos o debe aprender de ellos. (¿Eso tiene sentido?)
(Software) La arquitectura es un tema muy amplio, no esperes una bala de plata, pero siempre hay más preguntas y más dudas hasta que se acabe el tiempo y el dinero y tengas que seguir con la mejor solución hasta ahora.
fuente
En primer lugar, eche un vistazo a un proyecto bien desarrollado. Wordpress es un ejemplo muy bueno de estructura de código: es simple de entender pero ofrece muchos "enchufes". Por lo tanto, WordPress es fácil de entender a través de "plug in".
En segundo lugar, una forma muy fácil de verificar su arquitectura es intentar escribir pruebas unitarias. Por ejemplo, si la clase "Baraja de cartas" tiene un método "barajar ()", debe poder crear una Baraja de cartas de tamaño predefinido (es decir, 5 cartas 1,2,3,4,5), llame barajar y verifique en un manera fácil el resultado (id 1,4,2,5,3)
Debe poder hacerlo sin crear instancias de todas las clases de proyecto, y la prueba debe ser muy limpia para leer.
Si no puede hacerlo, debe agregar capas entre clases, reestructurarlas, hasta que obtenga una manera fácil de hacerlo.
Luego repita este paso para todas las clases principales de su proyecto.
Por último, pero no menos importante: una buena arquitectura podría ser "floja" en clases no tan básicas (es una cuestión de economía: las cosas muy bien diseñadas cuestan demasiado en el mundo real).
fuente
Una buena arquitectura para proyectos a gran escala es MVC (Model View Controller): http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
Sin embargo, si otros programadores lo entenderían es un asunto completamente diferente. MVC puede volverse complejo y, a veces, es excesivo para proyectos pequeños. Uno de los beneficios es que se escala fácilmente.
fuente
Si entiendo su pregunta correctamente, está hablando de la estructura de carpetas del proyecto y no esencialmente de una arquitectura. Si mi comprensión es correcta, sigue leyendo; de lo contrario, edite su pregunta o escriba un comentario y editaré mi respuesta en consecuencia.
Al diseñar una aplicación, después de responder algunas preguntas básicas como (¿qué? ¿Y a quién?), Necesitamos identificar los componentes y clasificarlos en función de la funcionalidad \ las responsabilidades. Hay dos formas principales que sé. Puede clasificar los componentes en función de los casos de uso que manejan (como inicio de sesión, búsqueda, etc.) o clasificar en función de los Recursos (Objetos ...). La primera forma se llama Orientada a la actividad y la segunda se llama Orientada a los recursos. Tradicionalmente, la mayoría de las aplicaciones clasifican los componentes en función de las actividades (ya que los diseñadores lo encontraron, fácil mientras se transfieren del dominio del problema al dominio de la solución). Pero estoy divagando.
Una vez que se identifica la clasificación de componentes, entonces necesitamos identificar la clasificación basada en Niveles. Una aplicación web típica tendrá un nivel de vista, un nivel de modelo y un nivel de controlador (MVC). Por supuesto, podría haber aplicaciones más complejas también. (la mayoría de las aplicaciones del mundo real son más complejas que ser así de sencillo).
Después de identificar estas dos taxonomías, crearé carpetas de nivel superior para identificar cada nivel. (UI, controlador, servicios, utilidades, etc.). Debajo de cada carpeta de alto nivel, crearé carpetas secundarias basadas en Funcionalidad o Recursos (Proyecto - / Proyecto de edición - / Proyecto de búsqueda, etc.). Idealmente, la clasificación funcional será multinivel.
fuente
Hay buenas arquitecturas y malas arquitecturas, sin embargo, no hay balas de plata. Una arquitectura debe adaptarse a los requisitos actuales y futuros altamente posibles.
Una buena guía sería asegurarse de que cada parte de la aplicación se pueda cambiar con un efecto mínimo en las otras partes y que cada parte tenga una unidad de cobertura completa automatizada y pruebas de integración.
fuente
La arquitectura se trata de asegurarse de que pueda continuar desarrollándose a largo plazo. Para aplicaciones más grandes, esto incluye hacer compensaciones entre hacer que las cosas sean independientes para que varias personas puedan trabajar simultáneamente y evitar la duplicación (DRY) para que el proyecto pueda mantenerse ágil. Los proyectos PHP tienden a centrarse en hacer que las cosas sean independientes y tienen una gran cantidad de duplicación.
Para tener una buena idea de la otra posición extrema, eche un vistazo a Seaside
fuente
Si no sabe cómo estructurar un proyecto grande, debe tomar prestado el diseño / arquitectura de otros utilizando uno de varios marcos PHP buenos. Recomendaría CakePHP, CodeIgniter o Symfony. Todos estos implementan un modelo, vista, controlador, modelo MVC que funciona bien en el desarrollo web, todos son bastante livianos y fáciles de aprender.
Una vez que conozca uno de estos marcos, podría estar en condiciones de diseñar su propia estructura para su proyecto en particular, pero si recién está comenzando, me pararía en el trabajo de otros en lugar de reinventar la rueda.
fuente
MVC es la arquitectura más utilizada, que está probada para resolver la mayoría de los problemas. Una buena arquitectura tendrá las siguientes características (y más, por supuesto)
fuente
antes de escribir cualquier código de producción, tome 2 semanas (noches :) y lea este libro. Cambiará de opinión durante mucho tiempo sobre la arquitectura de programación, las prácticas y el empaquetado.
Principios, patrones y prácticas ágiles C # por Prentice Hall
Los ejemplos están en C # pero son fáciles de leer, no se trata de cómo escribir la sintaxis correcta del código, sino de cómo pensar como programador.
Te prometo que lo guardarás en tu lugar más accesible en tu PC y te sorprenderá que hayas programado sin saberlo. Cambiará tu forma de pensar.
fuente