2009-08-11 7 views
1

L'application sur laquelle je travaille actuellement utilise intensément le modèle de référentiel avec NHibernate. Nous avons une classe de référentiel de base générique qui implémente les get et save standard. Cette classe est ensuite héritée par des référentiels pour chaque type. Ces dépôts peuvent ensuite ajouter leurs propres méthodes spécifiques au type (et remplacer les sauvegardes et obtenir si nécessaire).Le modèle de référentiel - recherche d'un référentiel basé sur un type

Cela fonctionne bien et d'un point de vue de la séparation des préoccupations signifie que nos objets d'affaires sont POCO et nos classes de référentiel gérer les spécificités de l'épargne. Pratiquement cependant il serait très utile quand on a un type de pouvoir dire "Get me the repository that save this type". Quels sont les modèles qui peuvent être utilisés pour faire cela? Ai-je besoin de gérer ma propre table de recherche? une table de recherche peut-elle être maintenue automatiquement en quelque sorte?

Répondre

6

On dirait que vous êtes prêt pour un cadre Dependency Injection

0

utilisant la réflexion et une convention de nommage par exemple:

DomainObjectNameRepository

Vous pouvez instancier dynamiquement le dépôt que vous recherchez en utilisant Activator.CreateInstance. Tant que vous savez comment ils sont nommés en utilisant l'exemple ci-dessus. Sinon, vous avez également le modèle de registre. Créez un élément de mappage dans le fichier web.config par exemple, puis vous pourriez avoir une méthode dans le registre appelée ResolveRepository. Un autre bonus à ceci est que vous pouvez utiliser IOC avec lui, inversion de contrôle avec exemple Unity. Le fichier de mappage mapperait DOmainObject à Repository, puis à l'intérieur de la méthode de registre, il pourrait ensuite utiliser Unity pour résoudre l'instance de ce Repository spécifique, par exemple et les avoir comme instances singleton.

Andrew

Questions connexes