Koncepcja ViewModel w ASP .NET Core MVC

0

Witam, zastanawiam się czy dobrze rozumiem koncepcję ViewModel w MVC. Korzystam z ViewModel do wyświetlenia powiązanych danych w jednym widoku np.

 public class Address
    {
        public int AddressId { get; set; }
        public string Country { get; set; }
        public string State { get; set; }
        public string City { get; set; }
        public string Pin { get; set; }
    }
public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string Department { get; set; }
        public decimal Salary { get; set; }
        public int AddressId { get; set; }
    }
public class EmployeeDetailsViewModel
    {
        public Employee Employee { get; set; }
        public Address Address { get; set; }
    }

Jeśli chodzi o wyświetlanie powiązanych danych to ma to dla mnie sens. Sytuacja zaczyna się komplikować jeśli chodzi o formularz dodania lub edycji pojedynczej instancji encji np. Employee. Na razie korzystam bezpośrednio z klasy modelu w moich kontrolerach i widokach (dla akcji dodania i edycji). Jednak chciałbym dodać jakąś walidację i jednocześnie nie chcę zaśmiecać sobie kodu klasy np. Employee validation attributes. I tu mam kilka pytań:

  1. Czy stworzenie osobnego ViewModel z wybranymi atrybutami modelu będzie dobrym rozwiązaniem dla widoków formularza np. EditViewModel, CreateViewModel?
  2. Czy posiadanie wielu ViewModels do jednej encji to dobre rozwiązanie, jeśli nie to czy jest inne?
  3. Czy może lepiej skorzystać z bliblioteki fluent validation zamiast tworzyć dodatkowe modele widoku, jeśli miałyby być użyte tylko do walidacji?
8

Wstawianie encji do view modeli kompletnie zaprzecza idei view modeli, czyli oddzielenia persystencji od prezentacji. Viewmodel powinien zawierać dokładnie to co jest potrzebne w widoku, albo co wypełnia się w formularzu, a czy będzie to mapowane na 1, czy na 15 encji to już go w ogóle nie powinno interesować i tym zajmie się mapper w kontrolerze/serwisie.
Więc jak najbardziej wiele viewmodeli dla jednej encji ma sens, bo jeden widok może być od wyświetlenia "Cześć Krzysztof" i wtedy w takim viewmodelu masz tylko pole FirstName, a w innym miejscu masz edycję całego profilu i pola dla imienia, nazwiska, adresu, daty urodzenia itd. I przykładowo oba viewmodele docelowo biorą dane z encji Person.

Fluent Validation jest dobrym pomysłem, ale NIE ZAMIAST viewmodeli, tylko jako uzupełnienie viewmodeli.

0

Dzięki Marek, teraz już wszystko jasne w tym zakresie.

Leci sub :)

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