知识卡片
正交架构风格与异构架构风格
内容
正交软件架构由”层”和”线索”两种组件构成:层由一组具有相同抽象级别的组件构成,线索是子系统的特例,由完成不同层次功能、通过相互调用关联起来的组件组成,每条线索完成整个系统中相对独立的一部分功能,同一层的组件之间不存在相互调用。若不同线索中的组件之间完全没有相互调用,这个结构就是”完全正交”的——本质是把系统按功能的正交相关性垂直切成若干线索,每条线索再横向分成若干层,各线索相同层次的组件抽象级别相同。优点是结构清晰易理解(组件位置直接说明它的抽象层次和功能)、易修改可维护(线索独立,改一条不影响其他线索)、可移植性强重用粒度大(同领域应用若有相似的层次线索结构,可实现架构级重用);缺点是并非所有系统都能完全正交化,或正交化成本过高,需要在”进一步正交化的额外开销”与”由此获得的更好可维护性”之间反复权衡。异构架构则是几种风格的组合,而非某种”纯”风格:组合方式包括用层次结构把一种风格嵌套在另一种风格的组件内部,或允许单一组件同时使用多种连接件(如通过接口访问知识库、同时又通过管道与其他组件交互)。采用异构架构的动机主要有两个:处理仍然有用但与新系统框架不一致的遗留代码,不推倒重写而是靠异构架构实现遗留代码重用;解决同一组织内部对共享软件包和标准存在不同解释和表示习惯的分歧。典型案例是C/S与B/S的组合:一种是”内外有别”模型——内部用户走C/S直接访问数据库服务器(交互多、响应快),外部用户走B/S经Web服务器间接访问(数据库服务器不直接暴露给外部,更安全,但响应较慢);另一种是”查改有别”模型——不论内外用户,凡需要维护修改就走C/S,凡只是查询浏览就走B/S(兼顾两者优点,但外部用户能直接访问数据库服务器,安全性打了折扣)。两种风格的共同点是都在处理”整个系统不能只用一种纯粹的组织逻辑”这个现实约束,只是正交架构解决的是同一风格内部的独立性问题,异构架构解决的是不同风格之间的共存问题。