Un de mes collègues a suggéré d'utiliser une classe d'usine pour créer des objets Viewmodel dans nos solutions ASP.NET MVC. L'idée étant qu'elle peut aider à la conception et à la maintenabilité de la façon dont les modèles de vue sont construits dans nos applications.
Je voulais savoir si quelqu'un d'autre en avait fait l'expérience. J'ai fait quelques recherches et trouvé très peu sur cette pratique.
Actuellement, nous créons des objets viewmodel au niveau du contrôleur, par exemple
public ActionResult Index()
{
return this.View(this.BuildIndexViewModel());
}
Donc, this.BuildIndexViewModel () est responsable de la création de la classe viewmodel (évidemment :). Mais nous étudions la possibilité de:
public ActionResult Index()
{
return this.View(ViewModelFactory.CreateIndexViewModel());
}
C'est une idée intéressante, mais je ne suis pas convaincu à 100%. J'étais intéressé par les opinions des autres à ce sujet.
la source
Réponses:
Dans ce cas, je dirais que la meilleure orientation à suivre serait les principes GRASP . Regardez en particulier les quatre critères d'attribution de la création d'objet:
En général, une classe B devrait être responsable de la création d'instances de classe A si l'un, ou de préférence plusieurs, des éléments suivants s'appliquent
Votre classe de contrôleur (B) correspond aux éléments # 3 & # 4 de cette liste (et # 2 si le viewmodel est POSTé en arrière), donc c'est déjà un endroit très sensé pour le comportement de construction du viewmodel (A). Selon moi, il n'y aurait que deux raisons qui m'obligeraient à extraire ce comportement de construction dans une classe spécialisée.
En repensant à ces 4 critères de création d'objets dans GRASP, je n'extrais le comportement à une usine distincte que si cela me faisait gagner un tick supplémentaire sur cette liste. Sinon, cela n'aurait aucune valeur.
J'espère que cela pourra aider!
la source