Zwracanie viewmodelu w MVC

0

Czesc
Chcialbym Was zapytac, ktore rozwiazanie bedzie lepsze

  1. Zwracam gotowy viewModel przez serwis do kontrolera
  2. Pobieram z serwisu pozadany obiekt i wtedy w kontrolerze mapuje na viewModel
    Ktory wariant bedzie blizej best practise? Moze jeszcze jakis inny?
0

Nie zauwazylem, ze niedokonczylem nazwy tematu, sorki :)

0

Oba są równie dobre, w CQRS częściej wystąpi 1) w pozostałych przypadkach przy jednym modelu 2). Wybierz ten który lepiej pasuje do danego kontekstu.

1

Tylko 1. Kontroler nie jest od żadnego mapowania.

0

Jeżeli mam viewModel i chciałbym w nim zawrzeć np. listę jakichś obiektów, to powinienem mieć listę encji
List<Class> classesList
czy
List<ClassViewModel> classesList
?

0

To drugie - tylko pytanie, czemu jeden viewmodel ma zawierać listę drugiego. No chyba, że to do jakichś desktopowych zagnieżdżonych gridów potrzebne.

0

W takim razie może zaproponujesz mi jakieś poprawne rozwiązanie. Dla przykładu, chciałbym w moim widoku strony głównej (HomeViewModel) wyświetlać kilka elementów jakieś klasy (np. Product), lecz nie chcę wyświetlać wszystkich informacji, lecz tylko wybrane (jakiś obrazek, nazwę, cenę i ewentualnie wybrane parametry). Dodatkowo chcę także wyświetlać elementy innej klasy (np. Category) i także nie wyświetlać wszystkich informacji, a np. tylko obrazek i nazwę. Jak zawrzeć te informacje w HomeViewModel?

Chodzi o ASP.NET dla jasności.

0
Skuteczny Arab napisał(a):

chciałbym w moim widoku strony głównej (HomeViewModel) wyświetlać kilka elementów jakieś klasy (np. Product), lecz nie chcę wyświetlać wszystkich informacji, lecz tylko wybrane (jakiś obrazek, nazwę, cenę i ewentualnie wybrane parametry). Dodatkowo chcę także wyświetlać elementy innej klasy (np. Category) i także nie wyświetlać wszystkich informacji, a np. tylko obrazek i nazwę. Jak zawrzeć te informacje w HomeViewModel?

No ja bym to widział jakoś tak:

public class HomeViewModel
{
    public string Name { get; set; }
    public string Price { get; set; }
    public byte[] Image { get; set; }
    public string Parameter1 { get; set; }
    public string Parameter2 { get; set; }
    public string CategoryName { get; set; }
    public byte[] CategoryImage { get; set; }
}
0

@somekind: dzięki za odpowiedź. Twój przykład wydaje mi się, iż miałby zastosowanie, kiedy to na stronie wyświetlałbym po jednym elemencie Product i Category, lecz co, kiedy miałbym ich więcej?

1

No to wtedy robisz List<HomeViewModel>. :)

0

Jakoś tego nie czuję. A co jeśli ich liczba jest różna? Nullowe pola? Mógłbyś opisać jak poprawnie tworzyć view modele i przekazywać w nich dane z serwisu do kontrolera i widoku?

0

Liczba czego jest różna? Produktów? Kategorii?

0

Liczba obiektów obydwu tych klas. Dotychczas view modele widziałem tak, np.:

public class ProductViewModel
{
  public string Name { get; set;}
public decimal Price { get; set; }
public List<ProductParamter> ProductParameters { get; set; }
}
0

Chyba musisz opisać jakoś dokładniej swoje wątpliwości bo z tego co piszesz nic nie wynika.
Nie widzę żadnego problemu z przekazanie do widoku jakiejś kolekcji ProductViewModel. I nie rozumiem co może mieć do tego różna liczba obiektów Produkt i Kategoria.
Taki model jaki napisałeś jest OK zwykle dla widoku jednego obiektu ale dla widoku jakiejś listy to jak napisał @somekind List<HomeViewModel> czy ogólnie ICollection<HomeViewModel>. Pomijając co to jest HomeViewModel bo po nazwie to nijak się ma do produktów czy kategorii chyba, ze w środku HomeViewModel sa kolekcje kategorii i produktów.

0
Sktuteczny Arab napisał(a):

Liczba obiektów obydwu tych klas. Dotychczas view modele widziałem tak, np.:

public class ProductViewModel
{
  public string Name { get; set;}
public decimal Price { get; set; }
public List<ProductParamter> ProductParameters { get; set; }
}

Ok, to jest spoko, o ile ten ProductParameter to też viewmodel, a nie jakiś inny twór.
Wcześniej myślałem, że wewnątrz jednej listy chcesz mieć obiekt zawierające inne listy, a na GUI to już może być przekombinowane, no chyba, że piszesz na desktop.

1 użytkowników online, w tym zalogowanych: 0, gości: 1