2010-07-14 10 views
0

Voici la situation.Essayer de déterminer si NHibernate ou quoi que ce soit d'autre s'appliquerait pour accéder à un service Web

Nous avons un middleware tiers (utilisant SQLServer comme back-end) avec lequel nous communiquons en utilisant un lien de service HTTP et une messagerie de type XMLRPC.

Le service renvoie toujours un jeu de données en tant que résultat de toute commande qui renvoie quelque chose. Il existe un moyen de transmettre une instruction SQL incorporée au service. Par conséquent, nous n'avons pas un accès direct à la base de données. J'essaie d'isoler ce service avec une couche qui simplifierait l'accès. Je pensais utiliser un ORM comme NHibernate.

Ce scénario est-il pris en charge par NHibernate ou est-ce que NH a toujours besoin d'un accès direct à la base de données?

Si vous avez d'autres suggestions, je suis toutes les oreilles ouvertes ...

+0

Pouvez-vous ajouter une nouvelle couche de middleware - disons un (des) service (s) WCF? ou devez-vous utiliser le middleware tiers? –

+0

C'est une idée que je bricoler. J'ajouterais une autre couche utilisant WCF et peut-être Agatha et qui parlerait à l'autre middleware. –

Répondre

1

Si je comprends bien, vous êtes obligé d'utiliser le middle-ware 3ème partie - mais il est pas facile à traiter? Je n'ai jamais utilisé NHibernate, donc je ne peux pas parler pour ça.

On dirait que vous voulez ajouter un nouveau "calque de service" (à défaut d'un meilleur terme) sur le dessus qui est plus facile à traiter; le Facade pattern saute aux yeux (bien que cela soit souvent utilisé pour regrouper une variété d'interfaces différentes et disparates sous un seul point d'intégration cohérent).

Fondamentalement, vous voulez définir un ensemble d'interfaces/services propres (dans la nouvelle couche de service); cette nouvelle couche fera alors tout le dur travail d'interaction avec le middle-ware - ou directement avec la base de données si vous en avez l'occasion.

Je suggère également de faire de cette nouvelle couche en quelques sous-parties: vous ne voulez pas aller et construire une nouvelle couche qui est étroitement couplée au middleware (ou base de données) - utiliser Dependency Injection pour isoler le façade extérieure de la mise en œuvre concrète, et maintenir loose coupling. De cette façon, si le middleware disparaît, vous n'aurez pas d'impact direct sur les consommateurs de la nouvelle couche de services que vous avez construite.

Enfin, gardez à l'esprit le Interface Segregation Principle (ISP) lors de la conception des nouveaux services orientés vers l'extérieur.

Free Image Hosting http://www.freeimagehosting.net/uploads/89e5a8a47a.jpg (Full size image here)

+0

C'est ce que j'avais en tête mais je veux quand même avoir un moyen de gérer les transactions (elles sont supportées par le middleware tiers). Je pensais utiliser le référentiel et l'unité des modèles de travail, mais d'une manière ou d'une autre, je n'arrive pas à envelopper mon esprit même après d'innombrables jours de lecture à leur sujet. Je n'ai pas encore trouvé un bon exemple dans le code source. –

0

Nous utilisons NHibernate et Sucks. Je ne le recommanderais pour rien. Pour autant que je sache, NHibernate nécessite un accès direct à la base de données (ou au moins vous donnez à NHibernate une chaîne de connexion comme vous le feriez pour n'importe quel autre fournisseur d'accès aux données). Aussi, à cause de cela, je suis sûr qu'il ne saura pas comment gérer les jeux de données Xml.

+0

Intéressant - Je n'ai jamais utilisé NHibernate, et parmi les rares personnes que je connais qui l'ont utilisé, peu ne jurent que par elle - et pourtant il semble y avoir une grande communauté (?). –