注意这一节标以“面向服务与面向对象”,有别于“比较面向服务与面向对象”。
区别在于所强调的事实:在这两个思想派别之间不必是竞争关系。
事实上,面向对象编程被普遍用于有
Web
服务内构建封装应用逻辑。然而,面向对象编程方法论在基本上与面向服务有何,这值得探究。对它们差异的理解会有助于你的工作。
下面列出这些设计方法方面的比较。(然而面向服务是基于服务的设计,面向对象是围绕对象的创建为核心。为了避免服务和对象间的比较混乱,使用了“处理逻辑单元”这一术语。)
l
面向服务强调处理逻辑(服务)单元间的松散耦合。尽管面向对象支持创建复用性、松耦合的编程例程,它们多数是以预先定义的类依赖为基础,结果导致了更多处理逻辑(对象)的紧密绑定。
l
面向服务鼓励不优雅的接口(服务描述)以便于每个通信(消息)包含尽可能多的信息以便于工作完成指定任务。面向对象编程充分支持精确的接口(
API
)以便通信(
RPC
或本地
API
调用)单元能够执行不同规模的任务。
l
面向服务期待显著改变处理逻辑单元(服务)的作用域。面向对象处理逻辑(
objects
)趋于使其作用域更小且更有针对性。
l
面向服务促进活动未知的处理逻辑单元(服务)的创建,从而驱动通信单元(消息)的智能化。面向对象鼓励处理逻辑数据的绑定,产生了高度智能化的单元(对象)。
l
面向服务偏爱处理逻辑单元
(服务)被设计成尽可能无状态。面向对象促进数据与逻辑的绑定,导致更具状态的单元(对象)。(然而,最近基于构件的设计方法偏离了这一趋势。)
l
面向服务支持组合松散耦合的处理逻辑单元(服务)。面向对象支持组合但也鼓励处理逻辑单元(
objects
)间的继承,这会导致紧耦合。
你或许已经注意到我们避免提及特定的面向对象原则,比如封装、继承及聚合。因为我们还不会充分描述面向服务的原则,我们在这一层次上给出个别的比较范例。以后将
详细解释个别的面向服务原则,然后
再继续这一讨论。
要点总结
-
SOA
从根本上源自客户
-
服务器架构。当前
SOA
使用了一些用于构建客户
-
服务器应用的技术。尽管更加完善,
SOA
引进的复杂性也与单纯的两层客户
-
服务器架构形成了尖锐对比。
-
分布式互联网架构已与
SOA
一样普遍,包括大量的技术。然而,不论是技术还是其基本设计原则,
SOA
都具有明显特征。例如,
SOA
引进了不同于分布式互联网架构的处理与安全需求,而且管理也典型地更加复杂,归咎于它对基于消息的通信的依赖。
-
传统架构已经且可继续在其自身的设计范式中使用
Web
服务。重要的是不要将这些架构与
SOA
相混淆。在分布式互联网架构中,发现了典型的对
Web
服务的非
SOA
方式的使用,此处
Web
服务被用于反映
RPC
风格的通信。