什么是架构?如果你问五个不同的人,可能有会得到五种不同的答案”。这是现代软件开发之父,统一建模语言UML的创建者之一Ivar Jacobson博士曾说过的一段话。敏捷专家Martin Folwler在《企业应用架构模式》一文中,也表达了类似的看法:“很多人都试图给架构下定义,而这些定义本身却很难统一。”现实情况确实如此,我们能查到的关于软件架构的定义,就有很多种不同的说法,这种混乱的状态给我们的开发活动和技术交流带来了一定的麻烦,最为典型的就是很多开发者往往把楚架构、框架以及类库混为一谈。
凡是有争议的东西,凡是遇到谁都不服谁的情况,就一定会出现派别。比如中国武术中的少林、武当、峨眉、崆峒等派别;象西方绘画艺术有什么野兽派、印象派还有抽象派。对于软件架构定义也一直流传着诸多的版本,我们大体可以把这些版本,最终归纳为两大流派:组成派和决策派。
按照组成派的说法:软件系统的架构就是用来将系统描述为计算机组件以及组件之间的交互。Mary Shaw和David Garlan给出了更为明确的定义:软件架构={组件(component),连接件(connector),约束(constrain)}。组件可以是独立的程序,比如数据库服务器,也可是子系统、框架、模块、类等不同粒度的软件单元,它们共同的特点都是承担一定的计算职责。连接件可以是过程调用、管道、RPC或者Web Service等,用于表示组件之间的相互作用。约束一般为对象连接时的规则,或指明构件连接的形式和条件。例如,上层构件可要求下层构件的服务,反之不行;两对象不得递规地发送消息;代码复制迁移的一致性约束;什么条件下此种连接无效等。
Len Bass是组成派的代表人物。按照我们以往的经验,但凡高人都有都有其高明之处,Len Bass也不例外,他不仅继承了组成派的观点,还在此基础上发扬光大,又加入了最新的元素。按照他的说法:架构等于多个结构,每个结构又等于组件加交互,加外部可见属性。这个定义在我们业界当中认可度最高,又称之为“结构派”。
第二大类决策派的认为:软件架构是软件一些重要方面决策的集合。这种说法的典型代表是RUP中对于软件架构的定义:
软件架构包含了关于以下问题的重要决策:
1、 软件系统的组织;
2、 选择组成系统的结构元素和它们之间的接口,以及当这些元素相互协作时所体现的行为;
3、 如何组合这些元素,使它们逐渐组成更大的子系统;
4、 用于指导这个系统组织的架构风格:这些元素以及他们的接口、协作和组合。
软件架构并不仅仅注重软件本身的结构和行为,还注重其它特性:功能性、性能、可扩展性、可重用性、可理解性以及美学等等。
其实这两个流派并不矛盾,只是描述问题的角度不同:结构派是从软件本身(又称为软件客体)的角度出发,用来描述软件系统是由哪些组件组成,这些组件如何交互;决策派则是从架构师(又称为软件主体)的角度出发,明确了架构师需要对哪些事情进行决策,那么这些的决策结果就构成了软件系统的架构。
本文时候用的开发工具为:goland 来自 嗖嗖下载
=========================================================
给大家来一道4年纪的数学题,答对有奖:
一只小猴摘了300个香蕉,需要搬回家,每次最多搬100个。小猴离家100米,它每走1米,都需要吃掉1个香蕉来补充能量,请问它最多能够搬回家多少个?