Dans une architecture à plusieurs niveaux, le meilleur endroit pour placer un code de mappage relationnel objet (OR/M) est dans la couche d'accès aux données. Par exemple, les requêtes de base de données et les mises à jour peuvent être déléguées à un outil comme NHibernate. Cependant, je voudrais garder toutes les références à NHibernate dans la couche d'accès aux données et les dépendances abstraites loin des couches au-dessous ou au-dessus. De cette façon, je peux échanger ou connecter un autre outil OR/M (par exemple Entity Framework) ou une approche (par exemple, des appels de procédures stockées plain vanilla, des objets simulés) sans provoquer d'erreurs de compilation ou de révision majeure de l'application entière. La testabilité est un bonus supplémentaire.Rendre OR/M lâchement couplé et séparé des autres couches
Est-ce que quelqu'un pourrait suggérer un emballage (c'est-à-dire une interface ou une classe de base) ou une approche qui permettrait de maintenir un couplage lâche ou non et d'être contenu dans une couche? Ou me diriger vers des ressources qui pourraient aider?
Merci.
Je vais aussi avoir besoin de mappeurs de données ou de DAOS car les référentiels seront entre le modèle de domaine et la couche d'accès aux données. Voir plus de détails ici: http://martinfowler.com/eaaCatalog/repository.html Le modèle de domaine contiendra les référentiels, mais ne peut contenir une référence à la couche d'accès aux données. Par conséquent, les DAO devront être injectés dans les référentiels. Mon objectif principal est de faire en sorte que la classe DAO de base pour chaque technologie d'accès aux données (par exemple NHibernate, Entity Framework, datastore XML, ...) hérite d'une interface commune. De cette façon, je peux les échanger ou les mélanger à volonté sans recompiler ni retravailler. – Genuine
On dirait que vous êtes sur la bonne voie. –