php - ventajas - ¿Grandes sitios web de MVC, usan un controlador... o muchos?
mvc pdf (5)
Depende de cómo funcionarán las otras partes. Si solo tiene un archivo de modelo, probablemente no valga la pena dividir el controlador. Si puede dividir el modelo en secciones y en el controlador, hágalo.
Sin embargo, a menudo encuentro que hay demasiada superposición entre los modelos para separarlos. Es posible que tenga un modelo para artículos, pero si desea mostrar los 20 artículos principales en una barra lateral en otras páginas, ese código debe estar en el modelo del artículo, y lo va a necesitar en cada página.
Honestamente, la única forma de hacerlo es probarlo y ver. Comience con un solo punto de entrada, y si también se vuelve difícil de manejar, vuelva a configurarlo en trozos más pequeños.
Tengo un sitio bastante grande, y estoy buscando la manera más eficiente de administrarlo (soy el único programador).
Estoy tratando de diseñar una estructura MVC muy simple (no quiero usar un framework) para mantener todo mi código en orden.
Para un sitio enorme, ¿es mejor tener un solo controlador para manejar todas las páginas o es mejor y más fácil dividirlas?
Si es solo uno, ¿cuál es un buen ejemplo de un controlador que no es de marco?
Normalmente, las personas dividen los controladores en controladores centrados en áreas específicas de funcionalidad.
Luego colocan un "controlador frontal" delante de todo, por lo que solo hay un punto de entrada para la aplicación. El único trabajo del controlador frontal es enrutar las solicitudes entrantes al controlador apropiado.
Mira cómo está configurado el componente Zend_Controller. Puede proporcionar todo lo que necesita y puede usarlo sin tener que comprar Zend Framework completo.
Tiendo a dividir los controladores según su responsabilidad en una sección específica de un sitio / aplicación. Esto hace que mantener el código sea mucho más fácil. Además, agrupo controladores (y vistas, modelos) dentro de módulos (carpetas). Aquí hay un ejemplo de un proyecto actual en el que estoy trabajando:
- Blog
- Publicaciones
- Comentarios
- Categorías
- Configuraciones
- Publicaciones
- Usuarios
Cuanto más complejo es un sitio, más módulos uso. Aunque la mayoría de mis módulos solo contienen un controlador ''Index'', me gusta la organización que ofrecen.
Luego utilizo un enrutador (controlador frontal) que mapea un URI de estilo REST al módulo / controlador / acción apropiado. Por ejemplo: mysite.com/blog/posts/view/7 llamaría Controller_Posts :: view (7) desde el módulo "blog". Un beneficio adicional de usar módulos es que puedo tener URI más específicos que si no tuviera módulos. Aunque supongo que podría remediarse usando un enrutador que permita definir rutas personalizadas, pero no me gusta demasiado.
Como muchas otras cosas, se reduce a lo que te hace sentir cómodo como desarrollador, pero probablemente podamos estar de acuerdo en que cuanto más organización tengas, mejor que estés, siempre y cuando no compliques demasiado las cosas.
Como un aparte rápido, le recomendaría que estudie el uso de un marco. Entiendo que no quieras utilizar uno de los que ya existen, ya que también los evité. Terminé escribiendo el mío que durante el año pasado me ha servido muy bien. Fue una gran experiencia de aprendizaje y solo contiene lo que quiero / necesito. Una vez dicho esto, es posible que desee examinar Kohana y CakePHP: no están excesivamente hinchados de la OMI y definitivamente le ahorrarán tiempo si decide no escribir el suyo.
Un enrutador / despachador, muchos controladores serían mi consejo. Los controladores deben asignar a las URL, lo que significa funcionalidad diferente. Un controlador colaborará con diferentes servicios para lograr cada caso de uso, por lo que un controlador para toda su aplicación se volverá demasiado difícil de manejar si su aplicación tiene más de un puñado de casos de uso.
Yo dividiría las divisiones lógicas en diferentes controladores; si son todas las páginas estáticas, las presentaría con el mismo controlador de "página estática".
Si tiene algunas páginas estáticas, una página de preguntas frecuentes (o sección), una lista de productos, use un controlador para cada sección diferente. De modo que las páginas estáticas se extraerían de archivos planos o de una base de datos por un controlador, las páginas de preguntas frecuentes se generarían desde una tabla de preguntas frecuentes por otro controlador, los productos y la información se generarían independientemente de la fuente.
Cada vez que se genera una página o se accede a los datos, use un controlador diferente.
Por supuesto, la herencia de clase se puede usar para crear la clase base con el código que necesita cualquier controlador.
No estoy seguro de lo que quiere decir con un controlador que no es del framework: me gustaría consultar el Zend (gasp) ''Framework'', el patrón MVC e incluso el propio controlador, que puede usarse aparte del resto del framework.