Generalmente tengo un controlador para cada grupo lógico de funciones. A menudo esto corresponderá con un controlador por modelo, a veces no.
Imagine que está creando un catálogo en línea simple que muestra una lista de categorías y luego cuando el usuario selecciona una categoría, muestra una lista de productos de esa categoría, junto con un panel de administración para operaciones CRUD
en categorías y productos. Tendría dos modelos (CategoryModel
y ProductModel
). Tendría un controlador que generaba los listados de categorías para la interfaz y otro controlador que generaba los listados de productos (por ejemplo, CategoryController
y ProductController
). Entonces tendría un controlador para categorías y productos en el back-end (AdminCategoryController
y AdminProductController
). Los dos controladores de back-end manejarían las operaciones de lista/agregar/editar/eliminar/ver para sus respectivos modelos. Si piensa en la estructura de su URL y coloca funciones relacionadas en las URL relacionadas, entonces la estructura de su controlador a menudo coincidirá con su estructura de URL. De hecho, algunos marcos (por ejemplo, CodeIgniter) enrutan las solicitudes en función del nombre del controlador como comportamiento predeterminado.
En cuanto a lo que se incluye en los controladores, trabajo en la idea de que los Modelos son para acceso a datos, y envuelven y ocultan la estructura de la base de datos. La lógica como "asignar la hora actual a la fecha de finalización cuando el estado está configurado como 'completo'" es un gran modelo de ajuste.
Las vistas contienen la totalidad de su presentación. Controladores/Modelos no deben generar o manejar HTML. Las decisiones como 2 columnas o 3 pertenecen a las vistas. La lógica de las vistas debe restringirse a lo que se requiere para generar la salida visible. Si desea consultar la base de datos desde una vista, probablemente esté aplicando demasiada lógica a la vista.
Los controladores son para lo que queda. Generalmente eso significa, validar la entrada, asignar datos de formulario a los modelos, seleccionar las vistas correctas y crear instancias de los modelos necesarios para manejar la solicitud.
Gracias .... eso es más o menos lo que estoy haciendo. Una cosa que trato de hacer es poner más lógica en la capa del modelo. Uso objetos de modelo de propel y pensaba que la validación debería ir a la capa de modelo. El controlador solo establece los datos en el modelo ... – AndreLiem
Algunos desarrolladores prefieren poner toda la validación en los Modelos. Encuentro que la validación del formulario se realiza mejor en el Controlador (porque está estrechamente vinculado a la IU) y la validación básica del tipo de datos (por ejemplo, restringir un campo de enumeración a determinados valores) funciona bien en un modelo. –