Estamos construyendo una aplicación de recursos humanos bastante grande en ASP.NET MVC, y hasta ahora nuestros controladores se están volviendo bastante grandes. Por ejemplo, tenemos un controlador de empleado y se incluyen todas las vistas de los empleados (información personal, deducciones de empleados, dependientes, etc.). Cada una de estas vistas puede tener múltiples acciones o subvistas (por ejemplo, CRUD). Cada acción es relativamente pequeña, pero los controladores pueden tener docenas de funciones.¿Es mejor tener controladores enormes o muchos controladores en MVC?
¿Existen mejores prácticas para dividir controladores? En lugar de tener un controlador de empleado con docenas de vistas, ¿sería mejor tener un controlador para cada subtipo (es decir, EmployeePersonalInfoController, EmployeeDeductionController, EmployeeDependentController)?
Y, por último, ¿importa?
Actualizado Aclaración
Mi preocupación original con las acciones CRUD. Por ejemplo, consideremos crear y eliminar ...
acciones actuales en EmployeeController:
CreateEmployee()
DeleteEmployee()
CreateEmployeeDeduction()
DeleteEmployeeDeduction()
CreateDependent()
DeleteDependent()
etc.
Si los controladores se dividieron:
EmployeeController
Create()
Delete()
EmployeeDeductionController
Create()
Delete()
EmployeeDependentController
Create()
Delete()
EmployeeBenefitController
Create()
Delete()
etc.
En la primera situación, nuestra ~ 100 las pantallas se dividen en 8-10 controladores grandes. En el segundo, probablemente tendría ~ 50 controladores.
No estoy seguro de si "subtipos" fue la mejor redacción de mi parte. No estaría implementando áreas (agrupándolas en carpetas), simplemente creando más de ellas. Actualizaré la pregunta con algún tipo de ejemplo para aclarar. Gracias. –
La realidad, en la práctica, es que los controladores MVC hacen más que simplemente renderizar vistas. Por lo menos, necesita un manejador de envío y recepción por separado para cada página. Cada uno requiere diferentes entradas. Si tiene suerte, el modelo de vista que representa es el mismo modelo de vista que se publica. En una publicación, su controlador al menos tiene que descomprimir el modelo de vista en un DTO para pasar a su capa de lógica de negocios, y probablemente tendrá que hacer algún tipo de transformación en él, porque el desglose lógico de los datos provenientes del usuario no es necesariamente lo mismo que lo que se envía a la capa de lógica de negocios. – Triynko
Después de pasar datos a la capa empresarial para su procesamiento, el controlador debe procesar una condición de éxito o falla. En caso de error, si tiene un modelo de datos personalizado (por ejemplo, representación de datos como una cadena JSON), entonces el estado del modelo incorporado es inútil, y deberá tomar otras medidas para asegurarse de que lo que el usuario publicó es -entregado en la pantalla. En caso de éxito, debe decidir a dónde enviar al siguiente usuario. Todo esto no es trivial, y aún sigue la regla básica de no poner lógica comercial en su controlador. Los controladores no son tan simples como las personas los están haciendo. – Triynko