2010-02-10 8 views
28

szukam niektórych opinii na dwa różne podejścia do definicji ViewModelpłaskim vs Zagnieżdżony ViewModel Zajęcia w ASP.NET MVC

Mam klasy firma

public class Company 
{ 
    public string Name { get; set; } 
    public int CountryID { get; set; } 
} 

Do tworzenia i edycji widoków I potrzebna jest lista krajów, aby wypełnić listę DropDownList dla wyboru kraju. Widzę dwie szerokie możliwości wyboru struktury ViewModel, które zostały szczegółowo opisane poniżej.

Zagnieżdżony ViewModel

public class CompanyCreateEditViewModel 
{ 
    public Company Company { get; set; } 
    public IEnumerable<Country> Countries{ get; set; } 
.... 
} 

płaskim ViewModel

public class CompanyCreateEditViewModel 
{ 
    public string Name { get; set; } 
    public int CountryID { get; set; } 
    public IEnumerable<Country> Countries{ get; set; } 
.... 
} 

Obecnie jestem sprzyjający zagnieżdżonego podejście, gdyż oszczędza mnie od definiowania pól po raz drugi, ale chcę otworzyć go na lepsze podejście i komentarze.

Dzięki

Odpowiedz

21

ja osobiście wolę zagnieżdżony podejście do prezentacji, ponieważ prowadzi do bardziej logicznej projektu podczas korzystania z częściowym widokiem. Możesz mieć CompanyPartialView używany w całej aplikacji, która wie, jak renderować Company, więc ma sens interpretowanie Company jako struktury zagnieżdżonej.

Z drugiej strony, płaskie klasy ViewModel są najłatwiejsze do pracy z danymi wpis. Masz tylko garść pól formularza, które wszystkie mapują do poszczególnych właściwości. Moją strategią jest zazwyczaj spłaszczanie ich na stronach wprowadzania danych i zagnieżdżanie ich na stronach prezentacji/raportu.

+1

Całkowicie się zgadzam. Używam zagnieżdżonych do prezentacji - 'CompanyViewModel' - i płaskich do wprowadzania danych -' CompanyCreateEditViewModel'. –

+0

@JarrettMeyer Czy używasz AutoMappera do zagnieżdżonego i płaskiego viewmodelu? Czy jest jakiś problem? Jestem po prostu ciekawy, mam złe doświadczenia podczas używania AutoMappera z zagnieżdżonym viewmodelem – Willy

+0

Mam złe doświadczenia z używaniem AutoMappera dookoła ... – Worthy7

5

Wolę zagnieżdżone, z kilku powodów:

  • to właśnie obiektowego chodzi.
  • Jeśli używasz LINQ do SQL lub Entities lub ORM, możesz po prostu przekazać obiekty ORM i nie musisz przekazywać wszystkich rodzajów właściwości.
  • Można przekazywać inne widoki, aby można było tworzyć osobne modele dla widoków częściowych, a jeśli widok ten używa częściowego, można przekazać klasę modelu widoku częściowego jako właściwość klasy modelu widoku.

IMHO, HTH.

+0

dajesz całemu modelowi widok częściowy lub tylko potrzebny? Chociaż daje tylko zagnieżdżony model widoku jest w porządku, ale automapper nie jest w stanie rozpoznać, że właściwości z częściowego widoku są członkami modelu zagnieżdżonego – Muflix

+1

To zależy. Czego potrzebuje częściowy widok? Czy częściowy widok jest częścią większej formy (wtedy potrzebny jest cały model, aby ścieżka ID działała poprawnie). Jeśli widok częściowy jest samowystarczalny, utrzymanie go w izolacji do podmodelu jest w porządku.W twojej instancji, jeśli potrzebujesz AUtoMapper, aby rozpoznać pewne właściwości, prawdopodobnie brzmi jak powód do przekazania całego modelu. –

+0

Dziękuję Brian. – Muflix