Typy danych w ViewModelu

Typy danych w ViewModelu
GO
  • Rejestracja: dni
  • Ostatnio: dni
0

Czy w ViewModelach dobrze jest używać tylko "prostych" typów danych, czy mogę bez problemu używać jakiś swoich typów? Tzn wiem, że mogę, ale czy tak się robi? :)
Przykład:
mam swoją klasę

Kopiuj
public class Person
{
  public int PersonId{get;set;}
  public string Name{get;set;}
  public string LastName{get;set;}
//...
}

i czy teraz mój ViewModel mam zapisać tak:

Kopiuj
public class PersonAccountViewModel
{
   public int PersonId{get;set;}
   public string Name{get;set;}
   public string LastName{get;set;}
   public string CurrentCategory{get;set;}
   public string BankAccount{get;set;}  
}

czy bez problemu można

Kopiuj
public class PersonAccountViewModel
{
  public Person Person{get;set;}
  public string CurrentCategory{get;set;}
  public string BankAccount{get;set;}  
}
bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1682
1
goodfather napisał(a):

Czy w ViewModelach dobrze jest używać tylko "prostych" typów danych, czy mogę bez problemu używać jakiś swoich typów? Tzn wiem, że mogę, ale czy tak się robi? :)

Oczywiście, że się tak robi. Dla przykładu, posiadasz 2 modele, lub ich niektóre własności, lub typy przeliczalne własności modelu itp., które byś chciał przekazać do jednego widoku, albo inny VM, wtedy ViewModel jest niezastąpiony.

Możesz też tworzyć modele w relacji many-to-many na wzór jak poniżej:

Kopiuj
public int ProjectID { get; set; }
        public int TechnologyID { get; set; }
        public Project Project { get; set; }
        public Technology Technology { get; set; }
neves
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1114
1

To zależy jak zawsze od szerszego kontekstu i przede wszystkim od osobistego poglądu na architektoniczny styl zwany "encja na twarz i pchasz".

Ja mam pragmatyczne podejście do tego tematu i dopóki encja nie zawiera żadnych elementów specyficznych dla widoku, nie widzę w tym problemu by obiekty domenowe były używane w warstwie widoku.

SS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
1
Kopiuj
public class PersonAccountViewModel
{
  public Person Person{get;set;}
  public string CurrentCategory{get;set;}
  public string BankAccount{get;set;}  
}

Jeśli CurrentCategory nie pobierasz z bazy, to jet to dokładnie ta sama sytuacją o którą się kłóciłem z @somekind

Nie powinieneś w ten sposób robić jeśli twoje "obiekty domenowe" to Domain Model, lub jeśli jest to Persistence Model czyli ta "Encja" na której operujesz w ORM, lecz to też należy do kwestii dyskusyjnej rozchodzi się o to żeby nie wiązać widoku z bazą.

Encja na twarz odnosi się też do kaleczenia języka domenowego ale jeśli masz zwykłego CRUD'a to przecież nikt ci nie zabroni proceduralnego podejścia z "obiektami" w których są same gety i sety, oraz procedurami update, delete.

GO
  • Rejestracja: dni
  • Ostatnio: dni
0

CurrentCategory nie pobieram z bazy. To ustawiam na podstawie kategorii jaka uzytkownik wybierze w z menu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.