2010-03-12 4 views
0

Je lisais à propos de "Fat Controllers" mais la plupart des articles se concentrent sur l'extraction de la logique de couche service/référentiel hors du contrôleur. Cependant, j'ai rencontré une situation différente et je me demande si quelqu'un a des idées d'amélioration.Contrôleurs ASP.NET MVC gros

J'ai un contrôleur avec trop d'actions et je me demande comment je peux le décomposer en plusieurs contrôleurs avec moins d'actions. Toutes ces actions sont responsables de l'insertion/mise à jour/suppression des objets qui appartiennent tous au même agrégat. Donc, je ne suis pas tranquille pour avoir un contrôleur séparé pour chaque classe qui appartient à cet agrégat ...

Pour plus de détails, ce contrôleur est utilisé dans une page à onglets. Chaque onglet représente une partie des données à éditer et tous les objets de modèle de domaine utilisés ici appartiennent au même agrégat.

Un conseil?

Cheers, Mosh

Répondre

0

Pour tous vos onglets, vous pouvez utiliser une action, qui ont un paramètre d'onglet, qui indiquent les données dont vous avez besoin de revenir.

Le travail du contrôleur consiste à transformer cet onglet string en variable de type enum. Ensuite, l'onglet sera envoyé au référentiel et le travail du référentiel doit renvoyer des données en réponse à la valeur de l'onglet.

Le contrôleur doit faire son travail à travers les services: Input Validator et Mapper. Le travail de service de mappeur consiste à mapper l'entrée de l'utilisateur (généralement les chaînes) sur la valeur tapée réelle (int, System.DateTime, types d'énumération, etc.).

Le travail de validation consiste à vérifier que l'entrée est valide. En suivant ces principes, vos contrôleurs devraient rester minuscules.

+0

Ceci n'est pas réalisable car chaque onglet renvoie des résultats différents à l'utilisateur. Donc, si je combine toutes les actions de ViewXXXTab en 1, alors j'aurai une méthode avec beaucoup d'instructions de conditation pour décider quelle méthode appeler pour récupérer des données. Par exemple: commutateur (onglet) { cas A: Appel SomeObject.SomeMethod(); case B: Appelez AnotherObject.AnotherMethod(); cas C: ... ... } – Mosh

0

Si vous vouliez quelque chose de simple et de facile, je vous suggérerais simplement de diviser le contrôleur en classes partielles basées sur les onglets. Bien sûr, c'est toujours un gros contrôleur, il y a juste une séparation évidente entre les différentes fonctionnalités de l'onglet.

Questions connexes