架构

架构最终分为两大流派:组成派和决策派。
    按照组成派的说法:软件系统的架构就是用来将系统描述为计算机组件以及组件之间的交互。Mary Shaw和David Garlan给出了更为明确的定义:软件架构={组件(component),连接件(connector),约束(constrain)}。组件可以是独立的程序,比如数据库服务器,也可是子系统、框架、模块、类等不同粒度的软件单元,它们共同的特点都是承担一定的计算职责。连接件可以是过程调用、管道、RPC或者Web Service等,用于表示组件之间的相互作用。约束一般为对象连接时的规则,或指明构件连接的形式和条件。例如,上层构件可要求下层构件的服务,反之不行;两对象不得递规地发送消息;代码复制迁移的一致性约束;什么条件下此种连接无效等。
    Len Bass是组成派的代表人物。按照我们以往的经验,但凡高人都有都有其高明之处,Len Bass也不例外,他不仅继承了组成派的观点,还在此基础上发扬光大,又加入了最新的元素。按照他的说法:架构等于多个结构,每个结构又等于组件加交互,加外部可见属性。这个定义在我们业界当中认可度最高,又称之为“结构派”。
第二大类决策派的认为:软件架构是软件一些重要方面决策的集合。这种说法的典型代表是RUP中对于软件架构的定义:
软件架构包含了关于以下问题的重要决策:
1、 软件系统的组织;
2、 选择组成系统的结构元素和它们之间的接口,以及当这些元素相互协作时所体现的行为;
3、 如何组合这些元素,使它们逐渐组成更大的子系统;
4、 用于指导这个系统组织的架构风格:这些元素以及他们的接口、协作和组合。
    软件架构并不仅仅注重软件本身的结构和行为,还注重其它特性:功能性、性能、可扩展性、可重用性、可理解性以及美学等等。

    其实这两个流派并不矛盾,只是描述问题的角度不同:结构派是从软件本身(又称为软件客体)的角度出发,用来描述软件系统是由哪些组件组成,这些组件如何交互;决策派则是从架构师(又称为软件主体)的角度出发,明确了架构师需要对哪些事情进行决策,那么这些的决策结果就构成了软件系统的架构。

你可能感兴趣的:(架构)