SO,OO,CO是不是傻傻分不清楚
soojoo本来是想和⼤家分享⼀下WCF相关的东东的,⾸先想到的是SOA这个东西,现在很⽕,在⽹上也看了很多这⽅⾯的东西,发现原来还有很多带O..什么的东东,于是就贴出来⼀起和⼤家分享⼀下,也便于以后对这些概念的理解以及对SOA这种东东的理解..
总的来说:⾯向服务(service Orientation,SO)代表的是⼀种设计理念,和⾯向对象(Object Orientation,OO)、⾯向组件(Component Orientation,CO)⼀样,体现的是⼀种对关注点进⾏分解的思想,⾯向服务是和技术⽆关的。
SOA:⾸先SOA服务是相对独⽴的,可复⽤的,强调松耦合(契约),正是由于这些特,SOA⿎励创建可组合的服务,另外由于SOA采⽤的是SOAP消息交换的通信⽅式,⽽SOAP为消息的承载内容提供了⼀致性表⽰。为了和客户端进⾏正常的服务调⽤,SOA采⽤了诸如XML、XSD以及WSDL作为服务描述的语⾔。⽽在传输安全、可靠消息、事物的⽀持SOA也采⽤了WS-*规范,为SOA实现真正的跨平台操作提供了极⼤可能。
通过对SOA、SCA、OSGi、JPF等⾯向组件理论和技术的理解,整理⼀篇⾯向对象开发与⾯向组件开发的区别。
1、⾯向对象中,对象之间的交互是细粒度的,通过单个消息进⾏交互;
⾯向组件中组件的交互是通过接⼝连接进⾏交互,接⼝内含有多个消息,接⼝不同则需要适配。
⽐如,信件⼀封⼀封的送,是对象之间的交互,信件⼀次性送完是组件交互。
2、组件的粒度⽐对象要⼤,在⾯向对象系统设计中,对象是构建系统的基本建筑材料;⾯向组件系统开发中,组件是系统的基本建筑块;组件有点类似⼦系统的概念,把⼀组相关的对象封装起来对外提供服务;组件的存在增加了信息的隐蔽程度,减少了馈⼊上层信道的信息数量,从⽽增加了系统的稳定性;
2、⾯向对象中强调封装,继承,多态;对象是类的实例,说到对象,往往是指源代码级的类的定义及其实现;在⾯向组件强调封装,在复⽤⽅⾯更多的是强调⿊盒复⽤。组件中,接⼝的概念特别被强调。接⼝是组件的和组件使⽤者之间的契约;接⼝的确定使得组件的开发者和使⽤者得以分开。
3、组件集中关注业务的职责,明确业务边界;对象关注同⼀业务的所有⽅⾯。
假如业务复杂的话,同⼀个概念实体,可能包含1000个属性,⽽这1000个属性可以分类成多个⽅⾯,
⽤⾯向对象⽅法,那么针对这1000个属性的操作,就会封装在这个对象⾥,结果所有操作因为所针对的属性捆绑,⽽捆绑,不能达到部分重⽤。
组件提供了更好的⽅式,针对这1000个属性的操作按职责分在不同的业务组件⾥,同时部分有公⽤可能的组件也可针对其他业务的提供某些⽅⾯的重⽤。
4、作为构建系统的基本建筑块,组件需要容器的帮助。容器为组件提供了运⾏环境,使组件能在⼀个较⾼的平台上完成⾃⼰最擅长的⼯作⽽不⽤考虑过多的底层细节。在组件中往往要实现⼀些容器所需的回调⽅法,来进⾏容器与组件间的沟通。容器也向组件提供⼀些公⽤的接⼝,使组件能够使⽤容器提供的服务(事务,安全等等)。容器的存在使得组件的使⽤者与组件的组装(配置)者得以分开。组件总是⼀定容器内的组件。由于组件⽣活在容器中,组件的管理尤其是⽣命周期的管理就成了容器的职责。⽣存在容器中,组件的状态(state)、持久性、通信⽅式也是必须要考虑的⼀些问题。由此产⽣了组件的类别。
呵呵~~废话有点多...