Muchos servicios de MVC hacen que el constructor del controlador sea muy grande.

StackOverflow https://stackoverflow.com/questions/333188

  •  22-07-2019
  •  | 
  •  

Pregunta

¿termino teniendo alrededor de 20 parámetros diferentes en el constructor de la clase de modelo, uno para cada servicio? ¿Es esto normal o una señal de que algo está apagado?

¿Fue útil?

Solución

Creo, categóricamente, que su controlador está interactuando con demasiados servicios. No he visto su código, por lo que me salgo de las suposiciones, pero me parece que su controlador está componiendo la lógica empresarial llamando a numerosos "pequeños". servicios, en lugar de recurrir a menos, "más grande" servicios que componen la lógica empresarial a partir de los servicios más pequeños.

Eche un vistazo para obtener información sobre los "servicios de orquestación". vs " entidad " o "capacidad" servicios y verás lo que quiero decir. Si crea servicios de orquestación que brindan a sus controladores la lógica que requieren, su arquitectura se mejora porque sus controladores realmente no deberían contener ninguna lógica comercial.

Realmente creo que la cantidad de servicios que consume es el problema aquí. Los contenedores de IoC pueden ayudar a resolver cómo vincula los tipos a sus parámetros de inyección, etc., pero creo que el problema es su arquitectura en este punto.

Otros consejos

Puede intentar consolidar algunos servicios o pensar en refactorizar las partes de la vista del controlador en componentes de ámbito más pequeños. Además, un marco de estilo de inyección de dependencia como Spring puede ayudar con cosas como esta.

Aunque no conozco tu configuración. 20 parece un poco, creo que vas en contra del SRP (Principio de responsabilidad única). Pero como no puedo ver tu código, es imposible saberlo. Si realmente necesita todos estos servicios en esa clase de modelo, tal vez necesite ponerlos en una clase de fábrica y usarlos como parámetro.

Es difícil dar una buena respuesta al respecto ya que no conocemos su dominio.

Como dijo @Matt, una inyección de dependencia podría ayudarlo aquí y sprint.NET es una buena y hay varias otras.

Al mencionar que menciona MVP en particular, al menos debería mirar Ent Lib 4.1 que ahora tiene Unity , la versión de Microsoft de DI. Su codeplex es probablemente un buen lugar para comenzar si esto es nuevo.

También hay fábricas de software que se integran con Visual Studio y dan sus herramientas para crear MVP para sitios web como servicios vinculados o web. Estos también provienen de patrones y prácticas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top