Me pregunto cómo acercarme a la herencia con Ver modelos en el patrón MVVM. En mi aplicación tengo un modelo de datos similar al siguiente:Herencia de MVVM con modelos de vista
class CustomObject
{
public string Title { get; set; }
}
class CustomItem : CustomObject
{
public string Description { get; set; }
}
class CustomProduct : CustomItem
{
public double Price { get; set; }
}
en mi aplicación tengo una clase ViewModelBase y luego iba a tener las siguientes Visualización de modelos:
- CustomObjectViewModel
- CustomItemViewModel
- CustomProductViewModel
Un implementatio áspera n de la CustomObjectViewModel se parecería a lo siguiente:
class CustomObjectViewModel : ViewModelBase
{
private readonly CustomObject _customObject;
public CustomObjectViewModel(CustomObject customObject)
{
_customObject = customObject;
}
public string Title
{
// implementation excluded for brevity
}
}
Parece lógico que mis Visualización de modelos se extenderían a sí mismos de la misma manera como lo hizo mi modelo (CustomItemViewModel extiende CustomObjectViewModel y así sucesivamente). Sin embargo, he notado que a medida que baje el árbol de herencia agregaré referencias adicionales al mismo objeto. Esto me parece excesivo y me preguntaba cómo abordar este problema y si era posible hacerlo mucho más limpio.
He utilizado el patrón de genéricos como se ilustra aquí, y tengo que decir que realmente no he tenido cualquier problema con tener una jerarquía de herencia para ViewModels. –
Sin duda funcionará sin problemas en muchos casos. Sin embargo, en mi opinión, veo que las clases de ViewModel están estrechamente relacionadas con Views. La herencia entre las clases de ViewModel tendría sentido si sus Vistas asociadas comparten alguna UI común. –
Estoy enfrentando el mismo escenario que Richard experimentó, excepto que mi pregunta es sobre la vista. Tengo una clase abstracta con 10 campos, y sus diversas subclases le agregan muchos más campos (cada uno lo agrega), ¿cómo debo crear las distintas vistas? No quiero redeclarar los campos base en cada uno de ellos (todavía no estoy tan seguro del ViewModel en sí, agradecería cualquier ayuda sobre él). – Shimmy