J’ai tenté de découpler NHibernate de ma couche de services. Mon architecture ressemble à ceci:
web -> services -> référentiels -> nhibernate -> db
Je veux être en mesure de générer des requêtes sans ressortingction à partir de ma couche de services et éventuellement de ma couche Web sans que ces couches sachent à quoi elles sont confrontées. Actuellement, j’ai une méthode de recherche sur tous mes référentiels qui prend en compte les IList criteria
. Cela me permet de transmettre une liste de critères tels que new object() {"Username", usernameVariable};
de n’importe où dans mon architecture. NHibernate en tient compte, crée un nouvel object Critères et ajoute les critères entrés. Cela fonctionne bien pour les recherches de base de ma couche de service, mais j’aimerais pouvoir transmettre un object de requête que mon référentiel traduit en critère NHibernate.
Vraiment, j’aimerais implémenter quelque chose comme ce qui est décrit dans cette question: Y a – t-il avantage à faire abstraction du critère nhibernate . Je ne trouve tout simplement pas de bonnes ressources sur la façon de mettre en œuvre quelque chose comme ça. La méthode décrite dans cette question est-elle une bonne approche? Dans l’affirmative, quelqu’un pourrait-il donner des indications sur la manière de mettre en œuvre une telle solution?
extraire l’ORM:
et le tout pour très peu de valeur: l’option vague d’échanger le cadre ORM qui aura probablement beaucoup d’autres problèmes
Mise à jour: expérience
J’ai déjà été impliqué dans la mise en place d’un nouveau fournisseur d’abstraction DAL existante. Il a fini par mal fonctionner, a introduit beaucoup de bugs, Errorhandling était un gâchis et utilisait parfois des données obsolètes parce que l’application assumait l’implémentation par défaut. Les raisons:
Il a fallu beaucoup de refactoring de l’application:
Points supplémentaires:
Le portage (des tâches de l’entreprise) aurait été beaucoup moins pénible à l’OMI car nous l’avons fait pour quelques-uns à cause des performances.
Update2: experience2: RoadBlocks lors de la tentative de transfert de NHibernate à EntityFramework (impl avec NH mais pas avec EF 4 dans un délai raisonnable)
Merci pour les réponses! Je comprends ce que vous dites, mais ces réponses ne résolvent pas mon problème. En raison de l’état du système que j’écris, je ne peux pas changer d’architecture. Au lieu de cela, je vais simplement conserver toutes mes requêtes d’API SQL / HQL / Critères à l’intérieur de la couche de référentiel au lieu d’essayer d’exposer une sorte de classe de requête complexe à mes services. Cette approche devrait fonctionner correctement. Pour ma prochaine approche architecturale cependant, je considérerai les points soulevés dans les autres réponses.