架构简洁之道
一个好的软件设计的终极目标是
- 软件架构的终极目标是,用最小的人力成本来满足构建和维护该系统的需求。
架构的优劣
一个软件架构的优劣,可以用它满足用户需求所需要的成本来衡量。如果该成本很低,并且在系统的整个生命周期内 一直都能维持这样的低成本,那么这个系统的设计就是优良的。如果该系统的每次发布都会提升下 次变更的成本,那么这个设计就是不好的。就这么简单
价值维度
行为价值
架构价值
编程范式
这些编程范式的历史知识与软件架构有关系吗?当然有,而且关系相当密切。
譬如说,多态 是我们跨越架构边界的手段,函数式编程 是我们规范和限制数据存放位置与访问权限的手段,结构化编程 是各模块的算法实现基础。
这和软件架构的三大关注重点不谋而合 功能性、组件独立性以及数据管理。
结构化编程
可推导性
欧几得层级构造定理方式
功能性降解拆分
- 结构化编程范式拆分成可推导的单元,模块可以按照功能进行降解拆分。
- 大型问题拆分为一系列高级函数的组合,高级函数又各自拆分成一系列低级函数
科学证明法
- 由证伪驱动的
- 不加限制的 goto 语句,无论我们为它写多少测试,也不能够证明其正确性。
总结
- 功能性降解拆分仍然是最佳实践之一。
面向对象编程
面向对象编程就是以多态为手段来对源代码中的依赖关系进行控制的能力,这种能力让软件架构师可以构建出某种插件式架构,让高层策略性组件与底层实现性组件相分离,底层组件可以被编译成插件,实现独立于高层组件的开发和部署
封装 encapsulation
- 通过采用封装特性,我们可以把一组相关联的数据和函数圈起来,使圈外面的代码只能看见部分函数,数据完全不可见,公共函数和私有成员变量就是这样
继承
- 继承的主要作用是让我们可以在某个作用域内对外部定义的某一组变量与函数进行覆盖