架构设计是一个很是大的话题,无论写几篇文章,接触到的始终只是冰山一角,更多的是实践中去体会。这篇文章主要介绍面向对象OO、面向方面AOP和面向服务SOA这三个要素在架构设计中的位置与做用。 编程
架构设计有三个维度,或者说是咱们在考虑架构时须要思考三个方向。设计模式
这三个维度分别为面向对象、面向方面、面向服务。架构
这三个维度能够看做是正交的,但不一样维度会互相印证,互相支撑,整个架构的示意图如图所示。架构设计
面向对象设计
面向对象技术最初是从面向对象的程序设计开始的,它的出现以上世纪60年代Simula语言为标志,并在Smalltalk语言的完善和标准化过程当中获得更多的扩展和对之前思想的从新注解。 htm
上世纪80年代中后期,面向对象程序设计逐渐成熟,被计算机界理解和接受,人们又开始进一步考虑面向对象的开发问题。直到如今,面向对象已经成为一种很是流行的编程方式,以及软件设计的架构。 对象
面向对象提出有三个主要目标:重用性、灵活性和扩展性,强调对象的“抽象”、“封装”、“继承”和“多态”。它能让人们以更加接近于现实世界的方式来思考程序,这点能够说是面向对象最大的进步。 继承
在OO思想的运用上,业界出现了不少好的经验与技巧,从而涌现出大量的设计模式,能够说面向对象是系统分析与设计时的一个很重要的方面。 开发
面向方面
get
面向方面最初来源于hook技术,本质上就是知足扩展的需求,能够在程序中自由扩展功能。
面向方面不只仅是一门编程技术,一样也是一种架构设计的思路。若是说OO是纵向地分析、切割整个系统,那么能够认为AOP是横向地对系统做切片。
简单地理解,OO与AOP分别从两个不一样的角度给咱们提供了分析系统的思路。面向方面能够弥补面向对象的缺陷,两种方式有机的结合在一块儿,能够更加有效地对系统进行分析。
咱们认为OO是接近于人类认识天然的思惟方式,但对于东方而言却并不必定是这样的。
当西方人看到一个复杂系统的时候,只会有一种思路,就是“分解”,将系统分解成一块一块,而后每一个部分进行研究。
当东方人看到一个复杂系统的时候,更多地会关注系统中存在的关系,将系统做为一个有机的总体进行研究,这也是东方和西方在事物见解上存在的差别。
这两种思惟方式都没有问题,若是结合起来分析问题,解决问题会更好。面向对象与面向方面也一样如此,都能对应到人类认识天然的思惟方式上。
面向服务
面向服务能够说是最近炒得比较火热的概念。包括如今提到的SaaS(Software as a service),软件即服务。准确而言,面向服务不只仅是软件行业的概念,这个要从社会的产业结构提及。
社会产业总共分为三个,第一产业农业,第二产业工业,第三产业服务业。最先社会的主要产业是第一产业农业,将近有几万年的历史。
十八世纪下半叶在英国开始的工业革命,对人们的生活产生了根本性的影响,社会的主要产业成了第二产业工业。
如今仍然属于工业时代,或者有人说的“后工业时代”。而在后工业时代,社会的经济体制一定要向第三产业服务业逐渐转型。面向服务实际上是社会经济体制重心的一种迁移。
仍是说回到软件行业,社会的主要产业将转变成服务业,天然软件行业也会出现对应的变化,那就是这里提到的面向服务。面向服务从此会影响到软件的交付模式,会对整个软件行业的体制产生影响。
而说到架构层面,面向服务是系统发布功能的一种方式。而且基于这种方式下不一样的系统之间能有效地通讯、协做。常见的实现技术就是Web Service。
软件全局观
软件架构设计的三个维度:面向对象、面向方面、面向服务。
最年长的一个维度就是面向对象,发展了好几十年,也是相对而言比较成熟的一个维度。它解决的问题是系统内部结构的设计。
面向方面思想的提出可以弥补面向对象的缺陷。面向对象的方式不能实现横切关注点的分离,而面向方面正是为了解决这个问题。面向方面与面向对象同样都是解决系统内部结构的设计。
面向服务更多的是涉及到系统的外部,简单地说就是发布功能。它并不关注系统内部结构的实现,因此说面向服务与面向对象或者面向方面并不冲突。
这三个维度并非绝对孤立的,它们之间会互相影响、制约,相互发展的。咱们在分析架构的时候须要同时考虑到这三个维度的问题,这样有助于咱们设计出更加优秀的架构。