Jestem zdezorientowany tym, czym powinien być model lub model widoku i jak powinny być one nazwane.Klasyfikacja i nazewnictwo dla Modelu i ViewModel w MVVM
Dla uproszczenia zostawię INotifyPropertyChange
z tego.
Poniższa klasa jest wyraźnie model:
class CountryModel
{
public string Name { get; set; }
public string Location { get; set; }
}
Co najczęściej zobaczyć na stronie internetowej jest to, że model widok byłby zdefiniowany następująco:
class CountryViewModel
{
public CountryViewModel
{
// initialize data (not ideal place, I know, but keeping it simple!)
}
public ObservableCollection<CountryModel> Countries
{
private get;
set;
}
}
Dlaczego nie jest powyżej model Countries
, np. CountriesModel
, na przykład? Dlaczego jest uważany za model widoku?
Czy to technicznie rzecz biorąc? Czy powinniśmy mieć kolejną klasę dla modelu widoku?
class CountryViewModel
{
private ObservableCollection<CountryModel> _countries = new ....;
public CountryViewModel
{
}
public ObservableCollection<CountryModel> Countries
{
private get { return _countries ?? _countries = LoadCountries(); }
set { _countries = value; }
}
private ObservableCollection<CountryModel> LoadCountries()
{
ObservableCollection<CountryModel> countries = new ...;
foreach (CountryModel country in CountriesModel)
{
countries.add(country);
}
return countries;
}
}
Czy powyższe ma sens? Po prostu nie rozumiem, dlaczego wydaje się być standardem i dlaczego miałbyś nazywać się CountriesViewModel
, gdy dla mnie powinien to być CountriesModel
i należy utworzyć CountryViewModel
uzyskując dostęp do danych z CountriesModel
.
Ponadto, jeśli trzymać się tego, co znajduje się w internecie, to znaczy CountryModel
i CountryViewModel
który zawiera zbiór CountryModel
zaobserwowania, to w jaki sposób radzić sobie z krajów zawierających każdą listę miast? Będę miał CityModel
jako POCO, a następnie dla listy miast, utworzę CityViewModel
o widocznej kolekcji CityModel
.
Ale co wtedy? Czy mam ustawić CityViewModel
część mojego CountryModel
? To wcale nie wydaje się w porządku! Być może tak jest i ktoś może to wyjaśnić. To jest, gdzie jestem zdezorientowany jeszcze bardziej, ponieważ utworzyłem CountryModel
o właściwościach Name
, Location
i właściwości typu List<CityModel>
, ale jak mam to poprawnie przedstawić w MVVM?
Jak zdefiniować to poprawnie? Zwłaszcza część, w której masz listę obiektów i każdy z tych obiektów zawiera inną listę. Który model, model widoku i jak mam obsłużyć listę wewnątrz mojego modelu?
rozumiem, co mówisz o ViewModel i to jest w porządku, ale nadal jestem zdezorientowany na jak mam do czynienia z modelem domeny. Biorąc jako przykład kraju, powinien mieć CountryModel i CountriesModel zapisać moją listę krajów, a następnie powinny Mam CountriesViewModel aby połączyć CountriesModel z moim zdaniem? – Thierry
Nie, nie powinien mieć klasę modelu domeny, która jest po prostu lista innej klasy modelu domeny; Jeśli jednak masz klasę modelu domeny, która pozwala na wiele wartości w danym kraju, powinieneś użyć listy klasy (składu) domeny domeny. –