De nombreux services MVC rendent le constructeur de contrôleur très volumineux.

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

  •  22-07-2019
  •  | 
  •  

Question

je finis par avoir environ 20 paramètres différents dans le constructeur de la classe de modèle, un pour chaque service? Est-ce normal ou un signe que quelque chose ne va pas?

Était-ce utile?

La solution

Je pense catégoriquement que votre contrôleur interagit avec trop de services. Je n'ai pas vu votre code - je m'écarte donc des hypothèses - mais il me semble que votre contrôleur compose la logique métier en appelant de nombreux "petits" & petits; " services, plutôt que d'en tirer moins, "plus gros" services qui composent la logique métier à partir de services plus petits.

Recherchez des informations sur les " services d'orchestration " vs " entité " ou " capacité " services et vous verrez ce que je veux dire. Si vous créez des services d’orchestration fournissant à vos contrôleurs la logique dont ils ont besoin, votre architecture est améliorée car vos contrôleurs ne doivent contenir aucune logique métier.

Je pense vraiment que le problème est le nombre de services que vous consommez. Les conteneurs IoC peuvent résoudre votre problème de liaison des types à vos paramètres d’injection, etc., mais je pense que le problème vient de votre architecture.

Autres conseils

Vous pouvez essayer de consolider certains services ou envisager de refactoriser les éléments de la vue contrôleur en des composants de portée plus petits. De plus, un framework de style d’injection de dépendance comme Spring peut vous aider.

Bien que je ne connaisse pas votre configuration. 20 semble un peu fort, je pense que vous allez à l’encontre du principe de la responsabilité unique (SRP). Mais comme je ne vois pas votre code, il est impossible de le savoir. Si vous avez vraiment besoin de tous ces services dans cette classe de modèle, vous devrez peut-être les placer dans un factoryclass et les utiliser en tant que paramètre.

Il est difficile de donner une bonne réponse à ce sujet car nous ne connaissons pas votre domaine.

Comme @Matt a déclaré qu'une injection de dépendance pourrait vous aider ici et que sprint.NET en est une bonne et qu'il en existe plusieurs autres.

Étant donné que vous parlez de MVP en particulier, vous devez au moins consulter Ent Lib 4.1 , qui contient désormais Unity , la position de Microsoft sur DI. Leur site codeplex est probablement un bon point de départ s'il s'agit d'une nouvelle installation.

Il existe également des fabriques de logiciels que s'intègrent à visual studio et donnent vous des outils pour créer MVP pour des sites Web en tant que services liés ou Web. Celles-ci proviennent également de modèles et de pratiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top