简介:
面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承。示例是按照Artech(www.cnblogs.com/artech)的讲解操作的。
通过添加Service reference的方式生成我们Client端的code
操作步骤:
1. 在服务端定义具有继承关系的ServiceContract。
2. 在客户端定义相应且相同的ServiceContract,建立实现ServiceContract的Proxy。
3. 在客户端直接调用Proxy即可。
SO和OO的区别:
当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解。其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替。在开始本Blog之前,我先来谈谈我对SOA和OO的区别,首先申明,这只是一家之言,欢迎大家批评指正,并且关于SO的谈论不是本Blog的主题,只是主题的引子,在这里只是简单讨论而已 。
OO和SO之间具有共同的部分,在运用的领域上存在交集,只有在基于他们交集层面上谈论谁是谁非才有意义,下面是我对SO和OO的区别。
OO关注的是如何通过对实体属性和行为的封装来重塑模拟软件环境的真实实体。对SO关注的则是对现实生活的某个任务、功能的实现,说得通俗点,就是如果做好一件事情。所以对象是对Data和Behavior的封装,而Service则只是体现了一个Functionality。Service是粗粒度的,这样才能导致Contract的稳定;Service一般是Stateless的,给定什么样的输入,就会有对应的确定的输出;Service是Autonomous,基本上的实现封装在Service本身之中,这样可以使它对其它的Service产生最小的依赖。所以对Service建模是一件不太容易的事情:Service不能太大,否则实现起来不容易,还会增加对外界的依赖;也不能太小,否则整合这个Service的成本会令你望而却步。
Service是可组合的(Composable),通过整合相关的单独的,完成某个单个Task或者Activity的小的Service,可以很容易产生一个大的Service,这个Service可以完成一个Functionality的整个流程。比如我们现在把一个Task描述成一个Work flow,如果采用SO的原理来建模,我们可以把组成这个Workflow的单个Activity设计成一个service, 然后根据具体Workflow的特点(比如可能是一个简单的Sequential workflow,也可能是一个基于State machine的workflow)加上相关的条件很容易的把这些Service整合起来,实际上通过整合集成,我们生成一个新的Service。对OO,由于他面对的是一个的Object,具体在分布式中是一个个的Distributed object,要建立一个Composable object则很难(实际上这样也没有什么意义)。
在OO的概念中,一个Object的属性往往就是另一个Object,一个Function的实现往往要调用另一个Object的方法,而且这种层次结构可以无限延伸。这样就会导致真个Object体系变得异常脆弱,经常造成牵一发动全身的状况。用一个很时髦的词语来表达的,就是紧耦合(Tightly couple),Object之间的强依赖关系促成了这种紧耦合的、脆弱的体系结构。而OS则不一样,由于 构成Service体系的单个Service是自治的,Service之间的调用(调用的这个词语容易让人联想到RPC,如果找一个比较贴切的词语来代替,我觉得consume比较合适)是基于Contract的,Service之间Communication是通过Message的(Message不仅仅是Data的封装,还是对整个调用的描述,同时基于XML的Message描述和Message的传递都是符合一个开放的标准的),所有这些成就了SO的松耦合(Loosely couple)。
说了这么多,可能大家都觉得我都是在赞扬SO,都贬低OO。其实不然,上面所说的3个方面都是在讲应用的构建,而不是具体的编程模式。我想表达的是,曾经盛行的基于OO的理论,在企业应用构架方面,已经不能满足我们的需要了,我们迫切希望一种全新的理论来指导我们进行企业应用的构架和集成,而这个理论非SO不可。
而在编程模型层面,OO仍然是不可替代的编程模式。所以OO应用于Programming,而SO则更多地运用在Architecture。既然是这样,我们必须有一种调和剂来调和这两个运用不同原理的两个层面的差异,实现他们之间的无缝的结合。比如如何来对继承,多态,重载等基于OO行为的支持。在这方面,WCF为我们提供了很好的解决方案。所以我说WCF不但是为基于SOA的应用架构提供了技术支持,还通过相关的机制完成我们提出的这个“调和剂”的使命。
没有合适的资源?快使用搜索试试~ 我知道了~
07.ServiceContract的继承
共80个文件
cs:16个
pdb:12个
dll:11个
需积分: 50 9 下载量 135 浏览量
2008-11-28
22:52:01
上传
评论
收藏 103KB RAR 举报
温馨提示
简介: 面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承。示例是按照Artech(www.cnblogs.com/artech)的讲解操作的。 通过添加Service reference的方式生成我们Client端的code
资源推荐
资源详情
资源评论
收起资源包目录
WCFLearn7.rar (80个子文件)
WCFLearn7
Client
ISimpleWhetherForecast.cs 446B
bin
Debug
Client.pdb 28KB
Client.vshost.exe.manifest 490B
Client.vshost.exe.config 2KB
Client.vshost.exe 14KB
Client.exe.config 2KB
BusinessEntity.dll 6KB
BusinessEntity.xml 139B
BusinessEntity.pdb 16KB
Client.exe 10KB
Client.csproj.user 168B
FullWhetherForecastClient.cs 603B
Program.cs 956B
obj
Debug
Client.pdb 28KB
Client.csproj.FileListAbsolute.txt 663B
ResolveAssemblyReference.cache 3KB
TempPE
Service References.FullWhetherForecaseServiceReference.Reference.cs.dll 8KB
Client.exe 10KB
SimpleWhetherForecastClient.cs 616B
app.config 2KB
Service References
FullWhetherForecaseServiceReference
Reference.cs 10KB
Reference.svcmap 2KB
Client.FullWhetherForecaseServiceReference.BasicWhetherInfo.datasource 692B
Service.xsd 2KB
Client.FullWhetherForecaseServiceReference.WindInfo.datasource 676B
FullWhetherForecastService.wsdl 14KB
Service.disco 397B
configuration.svcinfo 3KB
Service1.xsd 2KB
Service2.xsd 1KB
IFullWhetherForecast.cs 483B
Client.csproj 5KB
Properties
AssemblyInfo.cs 1KB
说明.txt 3KB
WCFLearn7.sln 3KB
WCFLearn7.suo 42KB
MyService
ISimpleWhetherForecast.cs 342B
bin
Debug
MyService.XML 134B
MyService.dll 5KB
MyService.pdb 12KB
BusinessEntity.dll 6KB
BusinessEntity.xml 139B
BusinessEntity.pdb 16KB
FullWhetherForecastService.cs 480B
obj
Debug
MyService.dll 5KB
MyService.pdb 12KB
ResolveAssemblyReference.cache 3KB
TempPE
Refactor
MyService.csproj.FileListAbsolute.txt 698B
MyService.csproj 3KB
SimpleWhetherForecastService.cs 475B
IFullWhetherForecast.cs 347B
Properties
AssemblyInfo.cs 1KB
BusinessEntity
bin
Debug
BusinessEntity.XML 139B
BusinessEntity.dll 6KB
BusinessEntity.pdb 16KB
BasicWhetherInfo.cs 1KB
obj
Debug
BusinessEntity.csproj.FileListAbsolute.txt 516B
TempPE
BusinessEntity.dll 6KB
Refactor
BusinessEntity.pdb 16KB
WindInfo.cs 1KB
BusinessEntity.csproj 3KB
Properties
AssemblyInfo.cs 1KB
HostingByIIS
bin
HostingByIIS.pdb 8KB
MyService.dll 5KB
MyService.xml 134B
MyService.pdb 12KB
BusinessEntity.dll 6KB
BusinessEntity.xml 139B
BusinessEntity.pdb 16KB
HostingByIIS.dll 4KB
Web.config 8KB
obj
Debug
HostingByIIS.pdb 8KB
CSC10.tmp 836B
ResolveAssemblyReference.cache 5KB
TempPE
HostingByIIS.dll 4KB
HostingByIIS.csproj.FileListAbsolute.txt 843B
HostingByIIS.csproj 4KB
App_Data
HostingByIIS.csproj.user 1KB
Service.svc 64B
Properties
AssemblyInfo.cs 1KB
共 80 条
- 1
资源评论
-LanPei-
- 粉丝: 13
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功