Un colega mío sugirió usar una clase de fábrica para crear objetos de modelo de vista en nuestras soluciones ASP.NET MVC. La idea es que puede ayudar con el diseño y la capacidad de mantenimiento de la forma en que se construyen los modelos de vista en nuestras aplicaciones.
Quería saber si alguien más tiene experiencia en esto. Investigué un poco y encontré muy poco en esta práctica.
Actualmente creamos objetos de modelo de vista a nivel de controlador, por ejemplo
public ActionResult Index()
{
return this.View(this.BuildIndexViewModel());
}
Entonces this.BuildIndexViewModel () es responsable de crear la clase viewmodel (obviamente :). Pero estamos estudiando la posibilidad de:
public ActionResult Index()
{
return this.View(ViewModelFactory.CreateIndexViewModel());
}
Esta es una idea interesante, pero no estoy 100% convencido. Estaba interesado en las opiniones de otras personas sobre esto.
design
asp.net-mvc
Jason Evans
fuente
fuente
Respuestas:
En este caso, diría que la mejor guía a seguir serían los principios GRASP . En particular, observe los cuatro criterios para asignar la creación de objetos:
En general, una clase B debería ser responsable de crear instancias de clase A si se aplica una, o preferiblemente más, de las siguientes
Su clase de controlador (B) coincide con los elementos n. ° 3 y n. ° 4 de esa lista (y n. ° 2 si el modelo de vista se PUBLICA), por lo que ya es un lugar muy sensible para el comportamiento de construcción del modelo de vista (A). Según lo veo, solo habría dos razones que me obligarían a extraer ese comportamiento de construcción en una clase especializada.
Mirando hacia atrás a esos 4 criterios de creación de objetos en GRASP, solo extraería el comportamiento a una fábrica separada si me ganara una marca adicional en esa lista. De lo contrario, no tendría ningún valor hacerlo.
¡Espero que ayude!
fuente