Je suis actuellement en train de développer une nouvelle application WPF et j'ai développé la majorité de ma couche de logique métier (ie mes modèles).Considération de conception de MVVM
Je suis sur le point de mettre en œuvre des classes ViewModel pour représenter une caractéristique de mon application. Je suis tout à fait nouveau dans le modèle Model-View-ViewModel et j'ai une question sur l'approche qui serait la meilleure à utiliser lors de l'implémentation de mes classes ViewModel. A partir d'exemples en ligne, j'ai trouvé que souvent le Model est membre du ViewModel. En utilisant cette approche, ViewModel expose les propriétés du membre Model afin qu'elles puissent être liées au modèle dans la vue.
Par exemple:
Public Class MyViewModel
Implements INotifyPropertyChanged
Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Private _myModel As ModelClass
Public Property MyModelPropertyA As Object
Get
Return _myModel.MyModelPropertyA
End Get
Set(ByVal value As Object)
_myModel.MyModelPropertyA = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("MyModelPropertyA")
End Set
Public Property MyModelPropertyB As Object
Get
Return _myModel.MyModelPropertyB
End Get
Set(ByVal value As Object)
_myModel.MyModelPropertyB = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("MyModelPropertyB")
End Set
'.... And so On'
End Class
Ce que je n'aime pas cette approche est le fait qu'il ya beaucoup de propriétés que je vais être re-écriture. Par conséquent, je considère l'option Hériter de la classe de modèle dans le ViewModel au lieu d'utiliser un membre privé.
Like So:
Public Class MyViewModel
Inherits MyModel
Implements INotifyPropertyChanged
Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
'Now all of my properties are inherited'
End Class
Le problème avec la deuxième approche est que je ne suis pas sûr de savoir comment convertir mes modèles dans les modèles d'affichage alors que l'application est en cours d'exécution.
Vous ne pouvez pas définir viewModelInstance = ModelInstance.
(mais vous pouvez définir modelInstance = viewModelInstance)
Je cherche des conseils sur la meilleure approche sur la façon de mettre en œuvre les classes ViewModel.
Votre utilisation de l'héritage est intéressante. En ce qui concerne votre dernière question, vous auriez besoin d'une usine qui cache la création de l'objet. Un problème que je vois, cependant, est si un objet Modèle apparaît sur deux vues différentes, et a donc deux différents modèles de vue. S'il est déjà instancié en tant que VmA, vous ne pouvez pas le transformer en VmB. – HappyNomad