.net 试图确定NHibernate或其他任何东西是否会申请访问web服务

.net 试图确定NHibernate或其他任何东西是否会申请访问web服务,.net,architecture,service,data-access-layer,.net,Architecture,Service,Data Access Layer,情况是这样的 我们有一个第三方中间件(使用SQLServer作为后端),我们使用HTTP服务链接和类似XMLRPC的消息传递与之通信 服务总是返回一个数据集,作为任何返回内容的命令的结果。有一种方法可以将嵌入式SQL语句传递给服务 因此,我们无法直接访问数据库 我试图用一个简化访问的层来隔离这个服务。我在考虑使用像NHibernate这样的ORM NHibernate是否支持此方案,或者NH是否始终需要直接访问数据库 如果你有任何其他建议,我会洗耳恭听……如果我理解正确,你会被迫使用第三方中间件

情况是这样的

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

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

因此,我们无法直接访问数据库

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

NHibernate是否支持此方案,或者NH是否始终需要直接访问数据库


如果你有任何其他建议,我会洗耳恭听……

如果我理解正确,你会被迫使用第三方中间件——但这并不容易处理

我从来没有用过NHibernate,所以我不能这么说

听起来你想在上面添加一个更容易处理的新“服务层”(因为缺少更好的术语);我想到了跳跃(尽管这通常用于在单个内聚集成点下捆绑各种不同的接口)

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

我还建议将这个新层划分为几个子部分:您不想构建一个与中间件(或数据库)紧密耦合的新层——用于将外部外观与具体实现隔离,并进行维护。这样,如果中间件消失,您将不会直接影响您构建的新服务层的消费者

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


()

我们使用NHibernate,它很烂。我什么都不推荐。据我所知,NHibernate确实需要直接访问数据库(或者至少您只需要像其他数据访问提供商一样给NHibernate一个连接字符串)。此外,正因为如此,我敢肯定它不会知道如何处理Xml数据集。

您能添加一个新的中间件层吗?比如说WCF服务?还是必须使用第三方中间件?这是我正在修补的一个想法。我将使用WCF和Agatha添加另一个层,这将与另一个中间件进行对话。有趣的是,我从未使用过NHibernate,我认识的少数几个使用过它的人中没有多少人对此表示赞同,但它似乎有一个大的ish(?)社区。这是我的想法,但我仍然希望有一些处理事务的方法(它们由第三方中间件支持)。我曾考虑过使用存储库和工作单元模式,但不知何故,即使在阅读了无数天之后,我似乎也无法完全理解它们。我还没有在源代码中找到一个好的示例。