2011-04-19 74 views
4

我有一个WCF数据服务,通过HTTP公开我的数据库。摆脱wcf数据服务紧耦合

我意识到,将来如果我的数据库发生变化,客户端也需要更新,这意味着我已将数据库与客户端紧密耦合。

我该如何保持WCF数据服务的优势(它可以轻松地通过http暴露数据,而不需要太多努力)并且仍然具有低耦合性?

回答

0

如果您使用实体框架暴露通过WCF数据服务您的数据库,比EF是你的间接水平。它允许您更改数据库模式并保持相同的模型(这是WCF数据服务公开的内容)。

+0

真的吗?你可以改变你的数据库,仍然保持相同的EF对象? – Attilah 2011-04-21 15:21:42

+0

是的 - 我不是EF专家,所以我不知道你可以改变数据库多少,仍然保持模型一样,但你绝对可以做简单的事情,如:重命名(表,列,... ),在数据库中添加通过模型不可见的列,依此类推。很多其他事情可以通过数据库层中的视图和在这些视图之上使用EF来完成。 – 2011-04-21 16:20:10

1

我从来没有使用过WCF,所以这个答案可能不适用于这项技术。但是,你不能将所有数据库逻辑封装在客户端与之交互的方法或类中吗?然后,您可以在方法/类内更改新数据库的逻辑,并且只要公共合约相同,那么您就不必更新客户端代码。

例如:

class Client 
{ 

    DatabaseClass DC = new DatabaseClass(); 
    DC.PerformMethod(); //Blissfully unaware of the methods inner workings. 

} 

class DatabaseClass 
{ 

    public void PerformMethod() 
    { 
     //Encapsulate DB Logic here. If you need to change it, you can just change it here and the client needs to know nothing of it 
    } 

} 
1

在计算机科学中的任何问题,可以通过增加间接层

-David惠勒

你应该在你的包裹服务来解决抽象层 - 我相信这被称为服务代理模式。

然后,您的所有客户端都会与代理进行交互,如果您的服务将来发生变化,您只需更改代理服务器,除非服务的工作方式发生根本性的变化,在这种情况下,您会必须自然地改变你的客户。