Um colega meu sugeriu o uso de uma classe de fábrica para criar objetos viewmodel em nossas soluções ASP.NET MVC. A ideia é que ele pode ajudar no design e na manutenção da maneira como os modelos de exibição são criados em nossos aplicativos.
Eu queria descobrir se mais alguém tem experiência nisso. Eu fiz algumas pesquisas e descobri muito pouco sobre essa prática.
Atualmente, criamos objetos viewmodel no nível do controlador, por exemplo
public ActionResult Index()
{
return this.View(this.BuildIndexViewModel());
}
Portanto, this.BuildIndexViewModel () é responsável por criar a classe viewmodel (obviamente :). Mas estamos analisando a possibilidade de:
public ActionResult Index()
{
return this.View(ViewModelFactory.CreateIndexViewModel());
}
Esta é uma ideia interessante, mas não estou 100% convencido. Eu estava interessado na opinião de outras pessoas sobre isso.
design
asp.net-mvc
Jason Evans
fonte
fonte
Respostas:
Nesse caso, eu diria que a melhor orientação a seguir seriam os princípios GRASP . Em particular, observe os quatro critérios para atribuir a criação de objetos:
Em geral, uma classe B deve ser responsável por criar instâncias da classe A se um, ou preferencialmente mais, dos seguintes itens se aplicar
Sua classe de controlador (B) corresponde aos itens # 3 e # 4 dessa lista (e # 2 se o viewmodel for POSTADO de volta), portanto, já é um local sensato para o comportamento da construção do viewmodel (A). A meu ver, haveria apenas duas razões que me obrigariam a extrair esse comportamento de construção em uma classe especializada.
Olhando para trás para esses quatro critérios de criação de objetos no GRASP, eu extrairia o comportamento apenas para uma fábrica separada se me desse um tique adicional nessa lista. Caso contrário, não haveria valor em fazê-lo.
Espero que ajude!
fonte