2009-01-07 641 views
6

Estoy aprendiendo MVC y tengo problemas para decidir cuándo debo crear un nuevo controlador en lugar de solo agregar una acción y ver asociado a un controlador existente. Por un lado, la responsabilidad única parecería decir que un controlador debe limitarse a unas pocas acciones. Sin embargo, cuando intento esto, el número de clases crece exponencialmente (modelo, vistas y controlador para cada una), hasta el punto en que me pregunto si me estoy excediendo.¿Cuándo debería crear una nueva clase de controlador en ASP.NET MVC?

Por ejemplo, el AccountController predeterminado tiene Login, ChangePassword y acciones de registro. En su lugar, tendería a crear un LoginController, PasswordController y ProfileController, y clases de modelos relacionados. Entonces, donde había 1 clase, habría 3-6.

¿Hay alguna buena regla general sobre esto?

+0

Quizás esto sea útil (de Ruby): http://stackoverflow.com/a/8050513/1627888 –

Respuesta

6

Creo que debe ser pragmático al respecto. Estoy trabajando en un proyecto que consiste en un StatsController. El número de acciones crece continuamente (RandomStat, MostPopular, MostViewed, MostVoted, etc.) la lista sigue y sigue. Estas acciones son simples de satisfacer ya que las dependencias de StatsController no cambian. Estoy usando un IoC para satisfacer lo que necesitan mis controladores y cuando empiezo a ver que mis controladores necesitan referencias a objetos nuevos, esta es una señal de que deben separarse.

Si su LoginController, PasswordController y ProfileController confían en los mismos objetos, ¿por qué separarlos?

7

Debe dedicar un controlador para cada tipo de modelo que está manipulando. El controlador actúa como una colección de acciones que actúan sobre esos modelos. Esta es generalmente la regla de oro, pero a veces el alcance de un controlador trasciende un modelo único.

El AccountController se ocupa de todo lo relacionado con la autenticación. Este es un ejemplo de ir más allá del alcance de un solo modelo para abarcar la autenticación en general. ¿Cuáles son las partes clave de la autenticación? Recuperar usuarios, cambiar contraseñas, etc.

+0

Estoy trabajando en una aplicación de Rails que no tiene ningún modelo ya que toda la información está siendo captada por una API externa. ¿Cómo puedo decidir cuándo crear un nuevo controlador en este caso? No se requiere almacenamiento en la aplicación. La entidad principal en mi aplicación es el vuelo con soporte API para buscar, verificar disponibilidad, reservar etc. TIA – furiabhavesh

+0

@furiabhavesh Esa debería ser una nueva pregunta, no un comentario. Puede asignar sus controladores a sus controladores API. – Soviut

0

Mi AccountController actual tiene 12 métodos que para mí es completamente manejable.

Tengo otro controlador que actualmente tiene 34 métodos, pero todos están vinculados a una sola vista y cada uno tiene alrededor de 8-10 líneas de código máximo (compruebe los parámetros necesarios, actualice el modelo y redirigir según sea necesario).

La clave es encapsular su lógica de negocio en un módulo completamente separado. Eso permitirá que sus manejadores de acción sigan siendo extremadamente livianos y puedan hacer más fácil la prueba de su lógica comercial.

Cuestiones relacionadas