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
















