Мой коллега предложил использовать фабричный класс для создания объектов модели представления в наших решениях ASP.NET MVC. Идея состоит в том, что это может помочь с дизайном и обслуживаемостью способов представления моделей в наших приложениях.
Я хотел узнать, есть ли у кого-то еще опыт этого. Я провел некоторое исследование и нашел очень мало об этой практике.
В настоящее время мы создаем объекты viewmodel на уровне контроллера, например
public ActionResult Index()
{
return this.View(this.BuildIndexViewModel());
}
Так что this.BuildIndexViewModel () отвечает за создание класса viewmodel (очевидно :). Но мы рассматриваем возможность:
public ActionResult Index()
{
return this.View(ViewModelFactory.CreateIndexViewModel());
}
Это интересная идея, но я не уверен на 100%. Меня интересовали мнения других людей по этому поводу.
design
asp.net-mvc
Джейсон Эванс
источник
источник
Ответы:
В этом случае я бы сказал, что лучшим руководством будет следовать принципы GRASP . В частности рассмотрим четыре критерия назначения создания объекта:
Как правило, класс B должен отвечать за создание экземпляров класса A, если применяется одно или, предпочтительно, несколько из следующих
Ваш класс контроллера (B) соответствует элементам # 3 и # 4 этого списка (и # 2, если view-модель отправлена обратно), так что это уже очень разумное место для поведения конструкции viewmodel (A). На мой взгляд, есть только две причины, которые заставили бы меня вынести это конструкционное поведение в класс специалиста.
Оглядываясь назад на эти 4 критерия создания объектов в GRASP, я бы извлек поведение только в отдельную фабрику, если бы это принесло мне дополнительную отметку в этом списке. Иначе не было бы никакой ценности в этом.
Надеюсь, это поможет!
источник