Mój kolega zasugerował użycie klasy fabrycznej do tworzenia obiektów viewmodel w naszych rozwiązaniach ASP.NET MVC. Chodzi o to, że może pomóc w projektowaniu i utrzymywaniu sposobu, w jaki viewmodels są wbudowane w nasze aplikacje.
Chciałem dowiedzieć się, czy ktokolwiek ma takie doświadczenie. Przeprowadziłem pewne badania i bardzo niewiele znalazłem na temat tej praktyki.
Obecnie tworzymy obiekty viewmodel na poziomie kontrolera np
public ActionResult Index()
{
return this.View(this.BuildIndexViewModel());
}
Więc this.BuildIndexViewModel () jest odpowiedzialny za tworzenie klasy viewmodel (oczywiście :). Ale zastanawiamy się nad możliwością:
public ActionResult Index()
{
return this.View(ViewModelFactory.CreateIndexViewModel());
}
To ciekawy pomysł, ale nie jestem w 100% przekonany. Byłem zainteresowany opiniami innych ludzi na ten temat.
design
asp.net-mvc
Jason Evans
źródło
źródło
Odpowiedzi:
W tym przypadku powiedziałbym, że najlepszą wskazówką będzie GRASP zasady . W szczególności spójrz na cztery kryteria przypisywania tworzenia obiektu:
Zasadniczo klasa B powinna być odpowiedzialna za tworzenie instancji klasy A, jeśli ma zastosowanie jeden lub więcej z poniższych
Klasa kontrolera (B) odpowiada elementom nr 3 i # 4 na tej liście (i nr 2, jeśli model viewmodelowany jest z powrotem), więc jest to już bardzo rozsądne miejsce dla zachowania konstrukcyjnego viewmodel (A). Moim zdaniem istnieją tylko dwa powody, które zmusiłyby mnie do wyodrębnienia tego zachowania konstrukcyjnego do klasy specjalistycznej.
Patrząc wstecz na te 4 kryteria tworzenia obiektów w GRASP, wyciągnęłbym to zachowanie do osobnej fabryki, gdyby zyskało mi to dodatkowe zaznaczenie na tej liście. W przeciwnym razie nie byłoby w tym żadnej wartości.
Mam nadzieję, że to pomaga!
źródło