WCF 学习笔记(契约分解)

 

 

.摘要

 

    WCF 服务契约的分解与设计,服务契约中该定义那些操作,每个契约又应该包含那些操作,解决这些问题与WCF技术并无太大关系,更多地属于抽象的面向服务分析与设计的范畴。

 

.前言

    

     一个服务契约是逻辑相关的操作的组合。所谓的逻辑相关通常指特定的领域逻辑。我们可以将服务契约想象成实体的不同表现。

     

案例

  

 

namespace Jackyong.Animal.solution

{

    [ServiceContract]

    interface IDog

    {

        [OperationContract]

        void Fetch();

 

        [OperationContract]

        void Bark();

 

        [OperationContract]

        long GetVetClinicNumber();

 

        [OperationContract]

        void Vaccinate();

 

    }

}

 

上面的代码Idog服务契约的定义并没有体现职责分离的原则。虽然这些操作都是狗所应具有的,但是Fetch()Break()方法与Idog服务契约的逻辑关联性,远远强于GetVetClinicNumber()Vaccinate()方法,Fetch()Bark()体现了狗的本性,它的日常生活有关,属于示例化的犬类实体的职责。GetVetClinicNumber()Vaccinate()则体现了不同的特性,他们与兽医诊所的宠物记录有关,一个最佳方案是将GetVetClinicNumber()Vaccinate操作分解出来,形成一个单独的Ipet契约。

    [ServiceContract]

    interface Ipet

    {

        [OperationContract]

        long GetVetClinicNumber();

 

        [OperationContract]

        void Vaccinate();

    }

 

    [ServiceContract]

    interface IDog

    {

        [OperationContract]

        void Fetch();

        [OperationContract]

        void Bark();

    }

 

由于宠物的职责不依赖与犬类实体,因此其他实体,可以重用一下实体Ipet服务

class PoodleService : IDog, Ipet

    {

 

        public void Fetch()

        {

            throw new NotImplementedException();

        }

 

        public void Bark()

        {

            throw new NotImplementedException();

        }

 

        public long GetVetClinicNumber()

        {

            throw new NotImplementedException();

        }

 

        public void Vaccinate()

        {

            throw new NotImplementedException();

        }

    }

 

    class SiameseService : ICat, Ipet

    {

 

        public long GetVetClinicNumber()

        {

            throw new NotImplementedException();

        }

 

        public void Vaccinate()

        {

            throw new NotImplementedException();

        }

 

        public void Purr()

        {

            throw new NotImplementedException();

        }

 

        public void CatchMouse()

        {

            throw new NotImplementedException();

        }

    }

契约的分解实现了应用程序中诊所管理职责与实际服务(猫或者狗) 之间的解耦。将操作分解为单独的接口,是服务设计中常见的做法,它能降低操作之间的逻辑关系。但是有时候在几个不相关的契约中会找到相同的操作,这些操作与他们各自的契约存在一定的逻辑关系。

     

 

   

 

 

 

 

 

转载于:https://www.cnblogs.com/liuyong/archive/2011/04/13/2015442.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值