Solo quería un consejo sobre la forma de hacer las cosas de MVC. Estoy usando codeigniter y me preguntaba si es mejor tener un controlador por página para un sitio web o tener un controlador para todas las páginas.
Digamos que tengo un sitio web simple donde puedes visitar la página de inicio, iniciar sesión, crear una cuenta y contactar al administrador.
¿Sería mejor tener estos controladores: frontend (index), inicio de sesión, cuenta, contacto O tener un controlador llamado frontend o lo que sea con las acciones como login, createAccount, contact?
¿Cuándo sabe si es mejor usar un controlador en una situación?
Respuestas:
Es mejor tener un controlador por unidad lógica, por ejemplo, AccountController (inicio de sesión, registro), PagesController (inicio, contacto), Backend -> PagesController (crear, editar, eliminar), UsersController (crear, editar, eliminar), etc.
fuente
@Rushino Aquí tienes dos 'aplicaciones': la interfaz (para lectores) y la de fondo (para administradores). Para cada grupo de funcionalidad, tiene un controlador.
Iniciar sesión es un grupo de este tipo, que incluye la generación del formulario HTML (los campos, llamar a la vista) y el manejo del formulario (la validación, la conexión con el modelo). Entonces 'login' es un controlador con dos acciones: generateForm y handleForm.
Las páginas se dividen entre la aplicación front-end, que solo muestra páginas, y la aplicación back-end que permite editar, eliminar, crear y posiblemente verlas de una manera diferente. La página de inicio es 'solo otra página' en la parte frontal al menos, por lo que cabe dentro del controlador de páginas. En el backend, su lógica podría ser lo suficientemente diferente como para justificar tener un controlador completamente diferente.
Para los usuarios: si los usuarios pueden registrarse ellos mismos, necesitarán un controlador frontend, pero si no, todo lo que tiene que ver con los usuarios simplemente va en el backend.
Tenga en cuenta que cada una de las funciones de back-end puede requerir un generador y un controlador. Sin embargo, estas cosas se pueden dividir en archivos de configuración, con un complemento que es un generador de formularios genérico.
En resumen, se ve así:
fuente
Creo que debería usar un controlador por unidad de negocio, como OrdersController para todas las operaciones relacionadas con pedidos y demás. Soy consciente de que en este caso, los controladores se ENORMES, pero aún podemos usar clases auxiliares para delegar cosas como la inicialización del modelo y las clases parciales para distribuir acciones en archivos separados.
Por ejemplo, puedo tener
Create.cs and OrdersController
archivos OrdersController List.cs para la clase OrdersController, cada uno con el conjunto correspondiente de acciones. Hace las cosas mucho más limpias y aún mantiene las operaciones de pedidos centralizadas en una sola clase de controlador.Solo mis 2 centavos.
fuente
Creo que podría adoptar un enfoque diferente:
Un controlador principal como puerta de entrada que entrega solicitudes a controladores específicos. De esta manera, podría usar este controlador frontal para verificar cosas comunes como la autenticación de usuarios, analíticas de Google y cualquier otra cosa general que le gustaría hacer y mantener la estructura MVC pura.
Esta no es mi idea, pero Symfony Framework funciona de esta manera, así que puedo decirte que, según mi experiencia, esta es una forma realmente agradable y elegante de implementar una interfaz.
fuente