2010-07-14 31 views
0

这是情况。尝试确定NHibernate或其他任何东西是否适用于访问Web服务

我们有一个第三方中间件(使用SQLServer作为后端),我们使用HTTP服务链接和XMLRPC类似的消息传递进行通信。

服务总是返回一个数据集作为任何返回内容的命令的结果。有一种方法可以将嵌入式SQL语句传递给服务。

所以,我们没有直接访问数据库。

我试图用一层可以简化访问的层隔离此服务。我正在考虑使用像NHibernate这样的ORM。

这种情况是由NHibernate支持还是NH总是需要直接访问数据库?

如果您有任何其他建议我打开所有的耳朵...

+0

你可以添加一个新的中间件层 - 说一个WCF服务?或者你必须使用第三方中间件? – 2010-07-14 21:20:22

+0

这是我正在修补的一个想法。我会使用WCF和Agatha添加另一个图层,然后与其他中间件进行交互。 – 2010-07-15 11:41:35

回答

1

如果我理解正确的话,你不得不使用第三方的中间件 - 但它不是容易对付?

我从来没有使用NHibernate所以我不能说。

听起来像你想在顶部添加一个新的“服务层”(为了更好的术语),这更容易处理; (尽管这通常用于捆绑各种不同且不同的接口,在单个内聚集成点下)。

基本上你想定义一个很好的干净的接口/服务集(在新的服务层中);然后这个新层将完成所有与中间件交互的艰苦工作 - 或者如果你有机会直接与数据库交互。

我也建议将这个新图层分成几个子部分:你不想去建立一个紧密耦合到中间件(或数据库)的新图层 - 使用Dependency Injection来隔离从具体实施外立面,并保持loose coupling。那样,如果中间件消失了,你不会直接影响你所建立的新服务层的消费者。

最后,在设计新的面向外部的服务时,请记住Interface Segregation Principle(ISP)。

Free Image Hosting http://www.freeimagehosting.net/uploads/89e5a8a47a.jpgFull size image here

+0

这就是我的想法,但我仍然想要一些处理事务的方式(它们受第三方中间件支持)。我正在考虑使用存储库和工作模式单元,但不知何故,即使经过无数天的阅读后,我似乎也无法将自己的思想包围在他们身边。我还没有在源代码中找到一个很好的例子。 – 2010-07-15 11:51:23

0

我们使用NHibernate和它吮吸。我不会推荐它用于任何事情。至于据我所知,NHibernate确实需要直接访问数据库(或者至少你只是给NHibernate一个连接字符串,就像任何其他数据访问提供者)。另外,正因为如此,我敢肯定它不会知道如何处理Xml数据集。

+0

有趣 - 我从来没有使用过NHibernate,而我认识的少数几个使用过它的人并不是很多,但它似乎拥有一个大型社区。 – 2010-07-14 23:52:26