Ich bin verwirrt in was ein Modell oder ein Ansichtsmodell sein sollte und wie diese benannt werden sollten.Erläuterung und Namenskonvention für Modell und ViewModel in MVVM
Der Einfachheit halber lasse ich die INotifyPropertyChange
raus.
Die folgende Klasse ist eindeutig ein Modell:
class CountryModel
{
public string Name { get; set; }
public string Location { get; set; }
}
Was Sie meist auf dem Netz zu sehen ist, dass ein Ansichtsmodell definiert werden würde, wie folgt:
class CountryViewModel
{
public CountryViewModel
{
// initialize data (not ideal place, I know, but keeping it simple!)
}
public ObservableCollection<CountryModel> Countries
{
private get;
set;
}
}
Warum nicht die oben ist ein Modell von Countries
, dh CountriesModel
, zum Beispiel? Warum wird es als Ansichtsmodell betrachtet?
Sollte das technisch der Fall sein? Sollten wir eine andere Klasse für das View-Modell haben?
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;
}
}
Ist das oben genannte sinnvoll? Ich verstehe nur nicht, warum es ein Standard zu sein scheint und warum Sie CountriesViewModel
anrufen würden, wenn es CountriesModel
CountriesModel
sein sollte und ein CountryViewModel
sollte erstellt werden, Zugriff auf die Daten von der CountriesModel
.
Auch, wenn Sie zu halten, was auf dem Netz, das heißt CountryModel
und CountryViewModel
, die eine beobachtbare Sammlung von CountryModel
enthält, dann, wie würden Sie mit Ländern beschäftigen sich eine Liste der Städte enthalten? Ich hätte eine CityModel
als POCO und dann für die Liste der Städte, würde ich eine CityViewModel
mit einer beobachtbaren Sammlung von CityModel
erstellen.
Aber was dann? Soll ich den CityViewModel
Teil meiner CountryModel
machen? Das scheint gar nicht richtig zu sein! Vielleicht ist es und jemand könnte das klären. Dies ist, wo ich noch mehr verwirrt, da ich eine CountryModel
mit den Eigenschaften Name
, Location
und eine Eigenschaft des Typs List<CityModel>
erstellt hätte, aber wie stelle ich das korrekt in MVVM?
Wie definiere ich das richtig? Insbesondere der Teil, in dem Sie eine Liste von Objekten und jedes dieser Objekte haben, enthält eine andere Liste. Welches ist ein Modell, ein Ansichtsmodell und wie handhabe ich die Liste in meinem Modell?
Ich verstehe, was Sie über das Viewmodel sagen, und das ist in Ordnung, aber ich bin immer noch verwirrt darüber, wie ich mit dem Domain-Modell umgehen sollte. Wenn ich das Land als Beispiel nehme, sollte ich CountryModel und Countrymodel haben, um meine Länderliste zu speichern, und sollte ich dann ein Countrymodell haben, um Countrymodell mit meiner Sicht zu verknüpfen? – Thierry
Nein, Sie sollten keine Domänenmodellklasse haben, die nur eine Liste einer anderen Domänenmodellklasse darstellt. Wenn Sie jedoch eine Domänenmodellklasse verwenden, die mehrere Länderwerte zulässt, sollten Sie eine Liste der Länderdomänenmodellklasse (Zusammensetzung) verwenden. –