2010-10-27 14 views
2

Je suis la conception d'une application (ou Silverllight WPF, encore à débattre) mais je suis bloqué à un problème de conception et a été si vous demandez pouvait donner votre avis sur ce ....Qui est propriétaire du ViewModel dans une application MEF

Voici le scénario. Ceci est une application de gestion des employés pour les ressources humaines. Une fois l'application prête, HR peut demander l'ajout de fonctionnalités supplémentaires (ce qui signifie la plupart du temps, plus de données). Supposons qu'un formulaire d'employé enregistre l'enregistrement de l'employé dans la base de données .Le formulaire d'employé a un EmployeeViewModel associé avec lequel il communique. EmployeeViewModel utilise Entity Framework pour conserver ses données dans la base de données. Maintenant, si le HR veut ajouter un nouveau jeu de champs, dites "Information sur le conjoint", je prévois de fournir un plug-in que les RH peuvent simplement ajouter au formulaire quand il est disponible. Ce plug-in, SpouseInfo est en quelque sorte un usercontrol avec un modèle de vue qui lui est propre.

Le problème est de savoir à qui appartient ViewModel ici.

a. Est-ce que je rend SpouseInfo complètement indépendant. Chaque fois que le formulaire Employé est enregistré ou chargé, SpouseInfo appelle son modèle de vue et charge ou enregistre les données. Dans ce cas, avant de pouvoir enregistrer ou charger les données, il aurait besoin du EmployeeId du formulaire Parent avant que les données puissent être sauvegardées (ce qui signifie que le formulaire Employé enregistre d'abord les données, puis passe l'ID employé à SpouseInfo)

ou

b. Le formulaire Employé possède le ViewModel pour SpouseInfo. Cela étant l'entité mère, il est chargé de charger et de sauvegarder l'entité enfant, c'est-à-dire SpouseInfo viewModel.

Merci, A

Répondre

2

C'est vraiment un choix de conception. Le fait que vous utilisiez le MEF ne signifie pas que vous n'avez pas à décider quelle "propriété" est la plus logique pour votre application, et quels composants devraient être responsables des autres. Cela étant dit, je rendrais probablement les informations "SpouseInfo" conformes à une interface connue, et j'utiliserais cette interface (chargée via MEF) à partir du View/ViewModel de l'employé principal. Cela permettrait à tout contrôle injecté qui était une dépendance des employés à charger à l'exécution, quelque chose comme

public interface IEmployeeDependant 
{ 
    FrameworkElement View; 
    IPersistWithParentID ViewModel; 
} 

Si vous avez importé que par MEF, vous pouvez gérer la mise en page assez facilement, et appeler dans la machine virtuelle directement avec le bon requis informations (EmployeeId, probablement) pour conserver le "sub" ViewModel.

+0

Merci pour la réponse Reed. Je suis d'accord sur la façon dont je gère cela est purement un choix de conception et puisque je suis en mode design à ce stade, je veux juste m'assurer que je le fais de la manière la plus efficace. Votre suggestion de conception est logique. Je vais très probablement aller avec quelque chose comme ça. Merci. – Meenu