OO (VS) SO

继续上一篇博文《SOA——面向服务的体系架构》,这次主要向大家阐述面向对象和面向服务的关系,请大家多提宝贵意见!

OO(ObjectOriented,面向对象),用一张图表示OO进行系统开发的特性:

SO(Service-Oriented,面向服务),用一张图表示SO系统开发与运行的特性:

通过这两图的对比,如果抽象一点来说的话,这两张图其实都是一样的,运用同一种思想:通过某种形式,关联颗粒。如果用微观和宏观来说,OO是微观的,SO是宏观的。不追求细节的话,可以说,两者都是抽象出具体形式(对象,服务),然后根据某种协议关联起来,组成一个完整的系统。

SO和OO都属于系统在软件模型设计中的一种映射,不存在谁好谁坏的情况,并且这两者是可以共存的,我们的系统中既可以有对象的存在,方便我们解耦,分组做系统,也可以有服务的存在,将系统中各个零件通过消息组合在一起,应于企业服务。

举个例子来说,一个公司做软件,以每个服务包为单位做,每个服务包代表一种功能,在服务包中,采用面向对象(OO)的思想,利用类来编程和解耦,而一个公司的系统要跑起来的时候,就必须要所有服务包,或者一些服务包联合起来才能够跑通,这个时候就需要采用面向服务(SO)的架构,用消息将必要的服务包联系起来,以保证系统的正常运转。而其他的一些非必须服务包,可以延后再上线,只需要遵守接口协议,就可以随时的加入到整个系统的运营里。讲到这里大家可能对OO和SO有了一定的理解了,OO更加微观,细节参与到了系统的编程中,而SO更加宏观,粗粒度的整合系统。

为了更加便于我们了解SO,下面我们来阐述一下SO的基本原则:边界强制性、自制性、契约性以及Policy-based兼容性。

边界强制性——在SO系统中,跨国每个服务的边界去调用是需要成本的,而在OO的分布式系统中,我们可以很容易的调用远程对象,很有可能导致远程对象被过度调用;

自制性——在SO系统中,每个服务的内部都是自制的,即每个服务的升级,部署和修改对整个系统的影响是很小的,而在OO的分布式系统中,对象库的升级,部署和修改是以原子级别为单位的,由于耦合性过高,而且又没有SO的边界强制性,很大可能就会导致系统被重新建立(大家可以回想一下,是重新写一个系统容易,还是大范围优化一个系统容易?);

契约性——在SO系统中,服务之间通过议定的纲要来传递数据,通过契约来特定化行为,也就是说服务对外交换信息的时候,仅仅需要告知“我能够做什么”或者“我仅能够做哪些我已经声明过的事情”,根据自身的能力来暴露数据和契约;而OO则要求整个系统类型的同一化,而这个同一化的过程需要通过类型和类来恒定。

Policy-based兼容性——Policy把服务与交互之间的约束抽象了出来。理解,基于某一种协议。

综上,SO最大的好处就是松耦合,使我们的系统有了弹性和稳定性,我们完全能够在架构系统的时候,基于一个准确的前提和一套简单的规则,自由发挥我们技术。

ps:SO与SOA有什么关系?我的理解:SO更倾向于一种思想,而SOA是运用SO这种思想的软件系统架构。

本文主要参考《对比面向对象和面向服务》这篇博文,感谢作者的提供,在本篇文章中,我也加入了一些自己的思考,如有做的不好的地方,欢迎指出!

OO (VS) SO,布布扣,bubuko.com

时间: 2024-12-15 06:59:18

OO (VS) SO的相关文章

hdu 5288 OO’s Sequence(计数)

Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the number of i (l<=i<=r) , that there's no j(l<=j<=r,j<>i) satisfy ai mod aj=0,now OO want to know ∑i=1n∑j=inf(i,j) mod (109+7). Input There are mul

Python之OO 面向对象

Python之面向对象 在C++和Python中,都有面向对象的概念,但是两者有哪些重要的区别呢?用最简单的语言便是,C++把每一个用户(这里当然值的是使用代码的程序员)当做是潜在的可能的犯罪分子,可以提供给你的部分已经规定好了,不可逾越.Python则是个比较柔和的管理方式,它认为所有的用户都具有高度的自觉性,用户可以很自自觉的使用代码.更加生动的比喻见这里 类与对象 在Python中,类由关键字class定义,例如下面的代码: 1 2 3 4 5 6 7 class Student(obje

XX和OO(南阳oj1159)

XX和OO 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 描述 XXOO 给你一个由X和O组成的串长度不超过80,统计得分. 每个O的得分为目前连续出现O的个数X的得分为0 输入 先输入T 代表有T组测试数据T小于1000 接下来T行串 输出 对于每行串输出得分情况(每次输出占一行) 样例输入 1 OOXXOXXOOO 样例输出 1+2+0+0+1+0+0+1+2+3=10 来源 MLFBM 上传者 ACM_杨明鑫 #include<stdio.h> #include

[Java 05 OO] (基础篇) 《Java开发实战经典》

p5OO 第五章 面向对象 (基础篇) Notes (1), Constructor / this / String   String str1 = "hello"; 解释 : 是把一个在堆内存空间的使用权给了 str1 对象.   String str2 = "hello"; str1 == str2 是 true   String 字符串的内容不可改变 (2), Java 常用的内存区域    1), 栈内存空间    2), 堆内存空间    3), 全局数据

《你必须知道的.NET》读书笔记三:体验OO之美

一.依赖也是哲学 (1)本质诠释:"不要调用我们,我们会调用你" (2)依赖和耦合: ①无依赖,无耦合: ②单向依赖,耦合度不高: ③双向依赖,耦合度较高: (3)设计的目标:高内聚,低耦合. ①低耦合:实现最简单的依赖关系,尽可能地减少类与类.模块与模块.层次与层次.系统与系统之间的联系: ②高内聚:一方面代表了职责的统一管理,一方面又代表了关系的有效隔离: (4)控制反转(IoC):代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖: (5)依赖注入(DI): ①

OO的片段

摘自C++编程思想: ------------------------------ 继承与组合:接口的重用 ------------------------------- 继承和组合都允许由已存在的类型创建新类型,两者都是在新类型中嵌入已存在的类型的子对象.然而,当我们想重用原类型作为新类型的内部实现的话,我们最好用组合,如果我们不仅想重用这个内部实现而且还想重用原来接口的话那就用继承.如果派生类有基类的接口,它就能向上映射到这个基类,这一点对多态性很重要. 虽然通过组合和继承进行代码重用对于快

OO先导课——建议

就课程内容和教学方式谈谈自己的意见和建议 课程内容:Java简介,java基础语法,继承,接口,存储机制 教学方式:课上讲课训练,下课作业 1.作业环节:交流与总结不够.上课测试仅仅是反应了正确率,有bug没有解决,有代码优化的不够.希望能在课上多和同学交流作业思路与心得,每个人都分享一些经验或者困难,因为仅仅在群里讨论的话不容易抓到重点,也没有一个系统的梳理和汇总.同时希望助教能每次选出一个最佳作业供同学们参考. 2.教学:简单串讲一下系统中主要的类和方法,希望能在一开始就对库有一个肤浅但相对

OO设计基本原则

OO本身就是一种大的设计模式,它是随着软件规模越来越大产生出来帮助人们建模和开发的理念,生来就带着封装.继承.多态等可复用基因.为了充分发挥这些基因的功效,使用者需要遵守一定的原则,就是所谓的面向对象设计原则.然而正确地使用这些运用这些原则并不容易,只有把这些原则吸收成为身体一部分的经验丰富的工程师才能在遇到各种问题时,灵活地使用它们.一些OO大师为了方便新手更好地理解OO原则,就根据经验假象了一些软件设计过程中经常碰到的问题,并给出了遵循OO原则的解决这些问题的设计方案,就产生了设计模式,正如

OO的五大原则:SRP、OCP、LSP、DIP、ISP

OO的五大原则是指SRP.OCP.LSP.DIP.ISP. SRP -- (Single Responsibility Principle 单一职责原则) OCP--开闭原则(Closed for Modification; Open for Extension) 现将近期整理的文档提供给大家,这里对LSP做重点的介绍,望对大家有帮助,在学习和使用OO设计的时候,我们应该明白:OO的出现使得软件工程师们能够用更接近真实世界的方法描述软件系统.然而,软件毕竟是建立在抽象层次上的东西,再怎么接近真实