将数据访问层移动到WCF服务

时间:2009-11-05 06:01:24

标签: c# .net wcf design-patterns

我正处于为我的应用程序构建wcf服务的阶段,该服务将提供产品..我有应用程序下的域模型和持久层。

对于服务,我还需要一个类似的域模型和持久层。我不想复制内容,我也不想共享库并将应用程序和服务结合起来。

所以这让我想到,如果我应该创建一个单独的服务(或者我正在创建的这个新工具中实现)数据访问层,并使用该服务从应用程序进行数据访问,因此只会一个由应用程序和服务共享的数据访问层

这是一个很好的模式,是否存在等待我的重大问题,如果是这样,你的建议是什么?谢谢!

3 个答案:

答案 0 :(得分:1)

如果您将WCF服务作为资源访问层,则可以将现有数据访问层从客户端应用程序移开,因为您的WCF Web服务是数据交换的端点。

此刻,

  

客户端应用< - >数据库访问

这是一种不好的做法,它会公开您的数据库,并且默认情况下可能已阻止数据库端口。

使用网络服务,

  

客户端应用< - > Web服务(数据库访问)

它应该具有适当的安全实现(HTTPS和身份验证)。 Web服务通常托管在友好的端口80上,您根本不需要公开底层数据库。

答案 1 :(得分:1)

我曾经和你一样。最初在开发过程中,没有用于数据访问的wcf服务,所以我使用nhibernate进行数据访问。为了便于从直接的nhibernate访问切换到用于数据检索的wcf服务,我有类似的东西:

client app -> Repository Interfaces -> Repository Implementations(起初这个通过nhibernate检索数据,第二个通过wcf实现)。

从您的应用程序代码中隐藏实现细节的界面可能是适合您的问题的解决方案。 (顺便说一句,nhibernate数据访问代码主要在服务器端重用,所以你不必扔东西)。

答案 2 :(得分:-1)

我认为应用程序中应该只有一个数据访问层。因此,如果您创建服务并从中获取数据,请务必从客户端删除每个直接数据连接。

这也意味着您不必公开数据库,并且任何人篡改数据库的可能性都会很低。