Esta es más o menos una versión centrada en el marco de un past Stack Overflow question, que trata acerca de cómo la mayoría del material introductorio en aplicaciones MVC tiende a presentar un acoplamiento ajustado entre modelos, vistas y controladores. Por ejemplo, tendrá una tabla de Usuario que será modificada por un controlador de Usuario que a su vez empujará los datos filtrados a una vista de Usuario. Tengo la impresión de que muchos frameworks MVC tienden a reflejar este patrón también. Todo está bien y bien para lo que es, pero en realidad nunca me lleva a nada más allá de construir y mostrar monótonas listas de cosas con un formulario HTML.Aplicaciones de litio que van más allá de CRUD
El framework MVC que se ve en este momento es Lithium, lo que parece bastante interesante como un estudio de caso de las técnicas de codificación de PHP5.3. En un extremo, Lithium tiene una clase Model
que ofrece objetos envoltorios alrededor de tablas individuales y abstrae algunas consultas simples. Por otro lado, tiene una ingeniosa convención de enrutar URL a llamadas de método en objetos de controlador, que luego renderizan para mostrar plantillas.
Pero en medio de esto, me encuentro perdido en cuanto a dónde colocar toda la lógica interesante que relaciona los datos de la tabla A con los datos en las tablas de la B a la Z. O al menos, no estoy seguro dónde ubicar dicha lógica de una manera consistente con el diseño del marco. A mi entender, la abstracción de Lithium Model
no hace mucho más que eliminar alguna repetición de nivel de fila/actualizar/eliminar, y la arquitectura de controlador/vista parece principalmente sobre la interfaz de usuario. No me gustaría poner mucha lógica de negocios en la misma clase Controller
que está recibiendo llamadas de función enrutada de las solicitudes de URL.
Mi instinto sería llenar el vacío con un montón de mi propio código que existe más o menos por completo fuera del marco. No estoy seguro si debería esperar más que eso, pero dado lo rígidamente estructurado que todo lo demás está en Lithium, se siente de alguna manera insatisfactorio, como si hubiera podido rodar mi propio código de reducción sin la sobrecarga de asimilar la fuente de un gran marco.
¿Qué me falta aquí? ¿Existe una arquitectura o filosofía recomendada para usar este tipo de marco?
+1 pregunta interesante sobre el tema aburrido. No sé mucho al respecto, pero Lithium parece estructurado PMVC (modelo = base de datos) y la solución probablemente sea [usarlo con un ORM como Doctrine] (http://marianoiglesias.com.ar/li3-lithium/building- a-blog-with-lithium-and-doctrine /). Pero tal vez @NateAbele puede responder más. – mario