契约式终结点三要素之一,WCF的契约大体可以分为两种,一类是对服务操作的描述;另一类是对数据的描述。服务契约(Service Contract)属于前者,后一类包含其余3种契约:数据契约(Data Contract)、消息契约(Message Contract)和错误契约(Fault Contract)。
从功能的角度看,服务契约是相关操作的集合;从消息交换的角度看,服务契约定义的每一个操作代表一种消息交换模式(MEP:Message ExchangePattern);从跨平台的角度看,服务契约以一种与厂商无关的方式提供服务的描述,它和WSDL和SXD密不可分;从服务编程的角度看,WCF中的服务契约将基于.NET平台的CLR类型转换成平台无关的服务描述。
“契约”从字面上理解就是交互双方或多方就某个关注点达成的一种共识,是一方向另一方的一种承诺。签署了某个契约就意味着自己有义务履行契约中规定的各项规定,一旦违约就会影响契约双方的正常交互。
契约致力于解决两者之间的交互问题,它针对交互的层面进行抽象,从而保证交互的稳定性。软件工程师一种不同于传统意义上的工程学,它的宗旨在于如何使我们的软件能够尽可能地应对各种变化,这种变化可能是可以预见的,但绝大部分都是不可预见的。“变是永远不变的”,这句话用在软件开发中恰如其分。那么如何提高软件适应变化的能力呢?一个永恒的宗旨就是:识别并分离“易变”与“不变”,依赖于“不变”。
从交互的角度来讲,什么是“可变的”,什么又是相对“不变的”呢?那就要看交互的本质了。交互的目的可以看成是一种“服务的消费”,乙方消费另一方提供的服务或功能。那么“不变”的就是服务或功能本身,“易变”的就是服务或功能的具体实现。对于服务消费者来说,它只希望对方能够提供仔细所需的服务或功能就可以了,并不会关心对方是如何实现该服务或功能的。
从功能的角度看,服务契约是相关操作的集合;从消息交换的角度看,服务契约定义的每一个操作代表一种消息交换模式(MEP:Message ExchangePattern);从跨平台的角度看,服务契约以一种与厂商无关的方式提供服务的描述,它和WSDL和SXD密不可分;从服务编程的角度看,WCF中的服务契约将基于.NET平台的CLR类型转换成平台无关的服务描述。
“契约”从字面上理解就是交互双方或多方就某个关注点达成的一种共识,是一方向另一方的一种承诺。签署了某个契约就意味着自己有义务履行契约中规定的各项规定,一旦违约就会影响契约双方的正常交互。
契约致力于解决两者之间的交互问题,它针对交互的层面进行抽象,从而保证交互的稳定性。软件工程师一种不同于传统意义上的工程学,它的宗旨在于如何使我们的软件能够尽可能地应对各种变化,这种变化可能是可以预见的,但绝大部分都是不可预见的。“变是永远不变的”,这句话用在软件开发中恰如其分。那么如何提高软件适应变化的能力呢?一个永恒的宗旨就是:识别并分离“易变”与“不变”,依赖于“不变”。
从交互的角度来讲,什么是“可变的”,什么又是相对“不变的”呢?那就要看交互的本质了。交互的目的可以看成是一种“服务的消费”,乙方消费另一方提供的服务或功能。那么“不变”的就是服务或功能本身,“易变”的就是服务或功能的具体实现。对于服务消费者来说,它只希望对方能够提供仔细所需的服务或功能就可以了,并不会关心对方是如何实现该服务或功能的。
服务契约就是对功能的抽象,而功能通过一个个的操作(Operation)承载,所以服务契约可以看成是一个相关操作的集合。