2009-11-05 62 views
5

我正在为将提供产品的应用程序构建wcf服务的阶段..我有应用程序下的域模型和持久层。将数据访问层移动到WCF服务

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

因此,这让我觉得如果我应该创建一个单独的服务(或者在我创建的这个新实现中实现)数据访问层并使用该服务从appication访问数据,那么会有只有一个应用程序和服务共享的数据访问层

这是一个很好的模式,并且是否有重大问题等待我的下一步,如果是的话,那么您的建议是什么?谢谢!

回答

1

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

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

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

+0

这正是我的情况,因为我也使用nhibernate,而且我确实拥有存储库接口,然后在单独的库中实现存储库实现。有没有具体的例子可以通过我可以查看的服务来做到这一点? – kaivalya 2009-11-05 12:46:24

+0

对不起,我不能让你访问我们的代码库。然而,如果你只是从你的客户端应用程序访问一个接口,你不必关心实际的实现。当涉及通过wcf传输nhibernate实体时,请注意延迟加载集合的序列化问题。 wcf不喜欢nhibernate代理 – 2009-11-05 14:16:09

1

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

目前,

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

这是不好的做法,它暴露了你的数据库的公共和数据库的端口可能被阻止在默认情况下。

与web服务,

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

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

+0

这是废话。你不知道你在说什么。 – DarthVader 2013-09-09 20:46:47

-1

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

这也意味着你不必公开你的数据库,而且任何人篡改数据库的机会都会很低。