摆脱wcf数据服务紧耦合

时间:2011-04-19 21:13:51

标签: c# .net wcf wcf-data-services

我有一个WCF数据服务,它通过HTTP公开我的数据库。

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

如何保持WCF数据服务的好处(它可以轻松地通过http公开数据而不需要太多努力)并且仍然具有低耦合性?

4 个答案:

答案 0 :(得分: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 :(得分:1)

  

计算机科学中的任何问题都可以通过添加一个间接层来解决

     

-David Wheeler

您应该将服务包装在一个抽象层中 - 我相信这称为服务代理模式。

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

答案 2 :(得分:1)

除了另一条评论中提到的抽象级别之外 - 您应该使用存储库。

http://martinfowler.com/eaaCatalog/repository.html

答案 3 :(得分:0)

如果您使用Entity Framework通过WCF数据服务公开您的数据库,那么EF就是您的间接级别。它允许您更改数据库架构并保持相同的模型(这是WCF数据服务公开的内容)。