Typy danych w ViewModelu

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ę

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:

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

public class PersonAccountViewModel
{
  public Person Person{get;set;}
  public string CurrentCategory{get;set;}
  public string BankAccount{get;set;}  
}
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:

public int ProjectID { get; set; }
        public int TechnologyID { get; set; }
        public Project Project { get; set; }
        public Technology Technology { get; set; }
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.

1
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.

0

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

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