架构整洁之道(五)-软件架构
第十五章 什么是软件架构
软件架构的实质就是规划如何将系统切分成组件,并安排好组件之间的排列关系,以及组件之间互相通信的方式。
设计软件架构的目的,就是为了在工作中更好地对这些组件进行研发、部署、运行以及维护。
软件架构设计的主要目标是支撑软件系统的全生命周期,设计良好的架构可以让系统便于理解、易于修改、方便维护,并且能轻松部署。
软件架构的终极目标就是最大化程序员的生产力,同时最小化系统的总运营成本。
一个优秀的软件架构师应该致力于最大化可选项数量。
优秀的架构师会小心地将软件的高层策略与其底层实现隔离开,让高层策略与实现细节脱钩,使其策略部分完全不需要关心底层细节,当然也不会对这些细节有任何形式的依赖。
优秀的架构师所涉及的策略应该允许系统尽可能地推迟与实现细节相关的决策,越晚做决策越好。
第十六章 独立性
按层解耦:一个系统可以被解耦成若干个水平分层,UI界面、应用独有的业务逻辑、领域普适的业务逻辑、数据库等。
用例的解耦:按用例将系统切分成多个垂直切分。
开发的独立性
只要系统按照其水平分层和用例进行了恰当的解耦,整个系统的架构就可以支持多团队开发,不管团队组织形式是分功能开发、分组件开发、分层开发都可以。
部署的独立性
可以在系统运行过程中热切换其各自分层实现和具体用例。
重复
有些重复是表面性的,如果有两段看起来重复的代码,他们走的是不同的演进路径,也就是说它们有着不同的变更速率和变更缘由,那么这两段代码就不是真正的重复。等我们几年后再回过头来看,可能就会发现这两段代码是非常不一样的了。
解耦模式
1.源码层次:控制源代码模块之间的依赖关系,实现一个模块的变更不会导致其他模块也需要变更或重新编译。也叫作单体结构。
2.部署层次:控制部署单元(如jar文件、DLL)之间的依赖关系,以此来实现一个模块的变更不会导致其他模块的重新构建和部署。
3.服务层次:组件间通过网络数据包来进行通信。