2009-04-17 10 views
6

Actualmente uso CodeIgniter como mi marco de trabajo preferido cuando uso PHP. Una de las cosas con las que estoy luchando es la idea de una "página" y cómo representarla correctamente en MVC. Que yo sepa, CodeIgniter tiene un controlador frontal que delega a los controladores de página. En mi proceso de pensamiento, cada página tendría su propio controlador. Con demasiada frecuencia, veo a alguien usando un controlador de página lleno de muchos métodos. Entonces, en ese sentido, cada acción se convierte en su propia página.¿Qué define el concepto tradicional de "página" en MVC?

Nunca me ha gustado la idea de incluir muchos métodos en un controlador, porque parece que habrá demasiada sobrecarga si solo necesita uno o dos métodos en el controlador a la vez. Parece más razonable que cada página tenga su propio controlador, y las acciones solo corresponderían a algo que pueda hacer en esa página en particular. ¿Estoy pensando en esto de la manera incorrecta?

Lo que lo hace más confuso es que notare en algunas aplicaciones web donde tendrán un controlador que tendrá múltiples métodos (es decir, iniciar sesión, registrarse, ver, editar, etc.), pero luego en otros realmente tienen un controlador de inicio de sesión y un controlador de registro. ¿Cuál es el uso correcto de un "controlador de página"?

Respuesta

7

Desde una perspectiva de dominio, definitivamente digo que tiene más sentido tener 1 controlador por contexto de dominio. No necesariamente uno por página, aunque dependiendo del contexto, este puede ser el caso. Lo que quiero decir por contexto es "acciones que están estrechamente relacionadas".

Por ejemplo, un controlador de cuenta debe manejar el inicio de sesión, registro, cierre de sesión, cambiar contraseña, acciones. Todos ellos viven en el contexto de una "Cuenta"

Tome Stackoverflow por ejemplo. Tendría un controlador "Preguntas" que tendría acciones como DisplayQuestion, AskQuestion, Delete Question, MostRecent Questions, etc. Todas son diferentes "Vistas/páginas" que son administradas por un controlador.

1

Tiene razón en que cada método público en un controlador se convierte en una "página". Dicho esto, no es necesariamente una página web, una acción podría ser una publicación de datos y luego redireccionar a otra acción/página para que la página no necesariamente signifique "página web".

MVC usa muchas convenciones para que todo funcione. Por ejemplo, cada controlador debe terminar con "Controlador". Por lo tanto, un conjunto de páginas de usuario (crear, editar, eliminar, etc.) estaría en un UserController. En la carpeta Vistas, cada método público o acción dentro de la clase de controlador se convierte en una página web dentro de una carpeta que coincide con el prefijo del controlador (en este caso, una carpeta de Usuario). Entonces, una acción llamada "Eliminar" dentro de la clase del controlador apuntaría a la página Eliminar.aspx dentro de la carpeta del Usuario.

Parece un poco incómodo poner todos esos métodos en una sola clase, pero hace un buen trabajo de organizar funcionalidades basadas en su objeto.

+1

Su punto acerca de que cada controlador debe terminar con "Controlador" solo se aplica al framework Asp.Net Mvc y no necesariamente al framework PHP que está tratando. – Micah

1

En MVC, una "página" es lo que obtienes cuando unes los tres juntos. El modelo maneja la capa de datos, la vista maneja el HTML real que el usuario ve y el controlador decide cómo se interconectan para mostrar los datos deseados. Mi elección de usar un controlador por separado u otro método para un controlador existente depende de qué tan cerca esté la operación de los otros controladores que tengo. Digamos que quería tener un controlador UserAdmin, ahora es muy probable que se encargue de agregar un usuario, eliminar un usuario, cambiar contraseñas, etc. Si agregara una funcionalidad que tratara de cambiar la cuenta de un usuario de alguna manera, lo más probable es que lo escriba ahí. Si los hubiera separado en su propio controlador, naturalmente agregaría otro. Los controladores le permiten alojar tareas similares juntas para que puedan aprovechar lo que ya está en la clase, en lugar de tener que volver a crear lo que ya se ha hecho. Mucho de esto es como el programador piensa que debería hacerse.Lo que tiene sentido para usted puede no tener sentido para mí, esa es la elección del desarrollador (o del diseñador).

Cuestiones relacionadas