0 votes

Le système de gestion de l'information de l'entreprise (SGI) est un système de gestion de l'information de l'entreprise.

J'ai plusieurs contrôleurs qui utiliseront tous une fonctionnalité commune. J'ai donc séparé cette fonctionnalité dans un contrôleur distinct.

le contrôleur partagé a besoin d'un paramètre spécifique au contrôleur à partir duquel il est utilisé, et doit renvoyer des vues basées sur les identifiants qui lui sont transmis.

Une idée consiste donc à créer une instance de SharedController(int callingControllerId) dans le constructeur de chacun des contrôleurs qui l'utiliseront. Ensuite, dans les méthodes d'action de chaque contrôleur, on appelle les méthodes d'action du contrôleur partagé, en passant les identifiants appropriés, et en renvoyant les vues du contrôleur partagé au contrôleur appelant, qui renverra la vue à rendre.

Cela vous paraît-il correct ? Les contrôleurs doivent-ils créer d'autres contrôleurs en MVC ?

Merci de votre attention !

3voto

jfar Points 19380

Absolument pas, même s'il est assez courant que votre contrôleur hérite d'un contrôleur de base partagé.

public KittyController : MySharedBaseController
{

}

Comme le souligne Greg Roberts, bien qu'il soit courant d'avoir une base de contrôleurs, ce n'est pas toujours le meilleur endroit pour stocker des fonctionnalités partagées. MVC a beaucoup de points d'extensibilité et choisir un endroit étroit pour insérer son code est bien mieux que d'écraser des tonnes de choses dans un contrôleur de base.

2voto

Greg Roberts Points 1824

Je reconnais qu'un contrôleur de base est assez courant, mais je ne suis pas sûr que ce soit la bonne solution pour ce que vous décrivez.

Sans savoir ce qui est exactement partagé, c'est un peu difficile à déterminer, mais le fait que votre contrôleur de base connaisse les spécificités des contrôleurs qui héritent de lui sent un peu le roussi.

Voici quelques éléments à prendre en compte.

  • La composition est presque toujours préférable à l'héritage. Excellent article sur ce sujet
  • Le contrôleur de base doit avoir des méthodes/propriétés communes. Par exemple, le mien a quelques propriétés pour obtenir l'utilisateur actuel et une méthode générique pour appeler des services externes, mais pas de choses spécifiques provenant des contrôleurs hérités. En règle générale, si un contrôleur n'en a pas besoin, il n'est probablement pas utile dans l'implémentation de base.
  • Il est possible que certaines des nouvelles fonctionnalités de MVC 2 puissent résoudre votre problème. Regardez l'action d'équarrissage.

Comme pour tout ce qui concerne les logiciels, il y a des tonnes de façons de résoudre le problème, alors faites-le de la façon la plus logique pour vous et votre équipe.

1voto

RationalGeek Points 3033

Les contrôleurs sont construits par le runtime ASP.NET MVC et vous ne devriez jamais les construire dans votre propre code. Il semble que vous n'ayez pas vraiment besoin d'un contrôleur contrôleur Il suffit donc d'une autre classe que l'on agrège dans le contrôleur et que l'on utilise en tant que service. C'est tout à fait acceptable. En fait, je dirais même qu'en général, les contrôleurs devraient déléguer leur travail à d'autres classes de "service" et ne devraient pas avoir beaucoup de responsabilités (en particulier la logique du domaine) en elles-mêmes.

Je ne connais pas les détails de la raison pour laquelle cette classe de service a besoin de savoir à partir de quel contrôleur elle est appelée, mais vous pouvez peut-être simplement déclarer une énumération qui définit les différents cas d'utilisation, et la passer dans son constructeur. Le fait que la classe de service connaisse les différents contrôleurs serait pour moi une odeur de code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X