J'utilise MVVM avec Prism et Silverlight. J'ai plusieurs vues différentes d'un modèle. Comme j'écris plus de vues leurs ViewModels semblent reproduire beaucoup de code commun lié à la manipulation de ce modèle. Plutôt que de répéter le même code commun dans toutes les VM, je suis tenté de le repousser dans le modèle (ce qui serait probablement trop mélanger les préoccupations). Ou peut-être dans une classe de base ViewModel commune? Ou peut-être que mes machines virtuelles ont besoin d'un deuxième niveau de «VM partagée» entre elles et le modèle? Cette instance partagée unique, de deuxième niveau-VM, consoliderait le comportement et l'état partagés par les multiples machines virtuelles normales.Poussez la fonctionnalité ViewModel commune dans une classe de base?
Avez-vous des commentaires sur ces problèmes et les approches possibles?
Merci pour les commentaires les gars. J'aurais probablement dû vous en dire plus sur le code VM "partagé" spécifique en question.
Je peux voir mettre un peu futur code dans une classe de base VM, mais le particulier code « partagé » Je suis à la recherche semble appartenir à un INotifyPropertyChanged mis en œuvre par le modèle lui-même. Ceci est en partie basé sur ce other thread.
Je ne pense pas que cela viole le SoC, parce que le modèle est intrinsèquement dynamique. Certaines de ses propriétés ne sont valables qu'à certains moments. Cette nature dynamique du modèle n'est pas seulement quelque chose d'important pour l'IU, un test unitaire approprié s'en soucierait également. Par conséquent, ce modèle semble avoir besoin d'un INotifyPropertyChanged.
Un commentaire à ce sujet?
@Alan Cobb, c'est quoi tous? des marques dans le titre? – bmargulies