2010-05-20 2 views
2

Nous sommes chargés de migrer un ensemble existant d'entités (actuellement les POCOs persistantes avec NHibernate par rapport à une base de données MSSQL) pour maintenant persister vers un type de service Web (à construire, soit RESTful ou SOAP, et que nous contrôlons).ORM contre une source de données enveloppée par service

J'aime comment NHibernate encapsule les problèmes de persistance et nous permet de maintenir un modèle de domaine agnostique sans persistance et riche en logique. Existe-t-il un moyen de faire en sorte que NHibernate communique directement avec un service Web au lieu d'une base de données SQL? En d'autres termes, le "service au lieu de la base de données SQL" peut-il être traité comme un détail de mise en œuvre de la persistance et nous permettre de continuer à utiliser NHibernate? Est-ce que je pose la bonne question? :)

+0

Merci pour les réponses! Je réalise que NHibernate est destiné à mapper des entités à des données relationnelles. J'essaie toujours de l'utiliser à cette fin, bien que de façon moins directe: je voudrais mapper des entités côté client à des données relationnelles qui vivent derrière une interface RESTful. Je pense toujours à ORM, mais avec un mécanisme autre que SQL pour parler au magasin de données. Peut-être que je devrais regarder ADO.NET Data Services - peut-être s'il y a une couche client qui pourrait permettre à SQL d'être soumis qui le traduirait en appels de service RESTful, NHibernate pourrait encore être fait pour fonctionner avec cela. – blaster

Répondre

1

NHibernate est un ORM. Il mappe entre les objets et les tables relationnelles. Il ne correspond pas entre les objets et les services Web. Vous devez utiliser une API différente pour les services Web axés sur la persistance. Vous pouvez créer un ensemble d'interfaces implémentées à la fois par votre couche NHibernate (pour la base de données relationnelle) et la couche de service Web pour qu'elle apparaisse comme une API unique.

0

La question est valide, mais malheureusement, la réponse est non. Idéalement, vous devez concevoir vos services pour renvoyer des objets qui sont pertinents pour les consommateurs de votre service et vous utiliserez NHibernate pour obtenir les données de votre base de données que le service peut ensuite utiliser pour retourner au consommateur. En fait, je lisais un article intéressant sur l'exposition de vos données à travers votre couche de service l'autre jour. http://davybrion.com/blog/2010/05/why-you-shouldnt-expose-your-entities-through-your-services/ C'était une perspective intéressante sur le rôle des services dans le traitement des données pour vos applications.

Questions connexes