Vous semblez se poser deux questions . La première est: Comment puis-je utiliser PRISM pour m'assurer que mon schéma spécifique au module existe dans la base de données, et sinon, le créer. La deuxième question est: comment puis-je structurer au mieux ma couche de données de manière à la découpler dans une application modulaire.
Pour répondre à votre première question sur la façon de faire la vérification du schéma du module, je dis ceci:
Si vous avez été en passant par Prism, vous avez sans doute imaginé deux façons d'y parvenir. Comme avec n'importe quoi dans la programmation, il y a beaucoup de manières de l'accomplir. Si j'avais besoin de faire cela avec Prism, je ferais probablement ce qui suit: Créer une classe (MyPlugInModule.cs) dans mon assembly de module qui implémente l'interface Microsoft.Practices.Prism.Modularity.IModule. Je mettrais alors du code dans le constructeur, ou dans la méthode Initialize, qui vérifie la base de données pour voir si le schéma du module existe. Si ce n'est pas le cas, créez-le.
Pour répondre à votre deuxième question sur la façon de structurer au mieux votre modularité de données, je dis ceci:
Comme Goblin dit, cela dépend vraiment de quel type de modularité que vous essayez d'accomplir. Si vous vendez cette application et que vous souhaitez vendre des modules en tant que packages indépendants, vous ne souhaiterez probablement pas créer de modèle de données pour prendre en charge un package tant que l'utilisateur final ne l'a pas payé.
Vous devriez être en mesure d'utiliser Entity Framework pour vous assurer que vos modules peuvent partager des entités avec les modules d'application de base. De plus, en fonction de vos besoins ou si votre architecture le permet, vous pouvez vouloir extraire votre couche de données/modèle dans des assemblages qui ne sont pas parfaitement alignés avec vos modules. Cela réduira la duplication de code et les dépendances.
Dans une application sur laquelle je travaille actuellement, nous utilisons WPF avec MVVM, PRISM avec MEF et les services de données WCF.Nos modules clients partagent un ensemble de données communiquant avec notre point de terminaison de service de données principal qui se trouve au-dessus du modèle d'application de base (tables d'authentification/rôle, données d'application, etc.). Lorsque des tables dans notre base de données sont créées et spécifiques au domaine d'un module, un nouveau noeud final de modèle et de service est créé sur le serveur et un ensemble distinct est créé sur le client pour communiquer avec le modèle de données.
Si le modèle spécifique au module change, seuls les composants concernés doivent être modifiés, car les données spécifiques au module sont encapsulées dans son propre ensemble de service et client. C'est une meilleure option du point de vue de l'isolation pour les tests, la sécurité, etc. L'inconvénient est bien sûr que si le modèle d'application de base change, toutes les implémentations spécifiques au module doivent être mises à jour.
Mais encore une fois, cela dépend vraiment de vos besoins. Si vous respectez PRISM 4 avec MEF, les modèles de conception modulaires et entity framework 4, vous devriez être capable de trouver une bonne solution qui soit modulaire sans être étroitement couplée.
Était-ce la vision que vous cherchez? – BernicusMaximus
+1 pour une réponse sympa et bien réfléchie. –