Clean Architecture
整洁架构
- 减少加班
- 减少人力
第一章 设计与架构究竟是什么?
- 架构、设计 密不可分
目标
- 软件架构的终极目标是,用最小的人力成本来满足构建和维护该系统的需求。
指标
- 工程师人数
- 生产效率 千行代码
- 每行代码变更成本
- 工程师生产力
问题
- 我们可以未来再重构代码,产品上线最重要!”
- 但是结果大家都知道,产品上线以后重构工作就再没人提起了
- 错误观点是:“在工程中容忍糟糕的代码存在可以在短期内加快该工程上线的速度,未来这些代码会造成一些额外的工作量,但是并没有什么大不了。”
TDD长一点比非TDD节省10%
想要跑的快,首先要跑的稳
- ie. suit sale code merge.
- 30min merge , 4hour hotfix & report.
第2章 两个价值维度
- 行为
- 架构
software
- soft vs hard
- ware
艾森豪威尔紧急重要矩阵
- 紧急的永远不重要
- 重要程度 架构 > 系统行为
- 业务部门原本就是没有能力评估系统架构的重要程度
第3章 编程范式总览
- 结构化编程(structuredprogramming)-
- 面向对象编程(object-orientedprogramming)
- 函数式编程(functionalprogramming)
三个编程范式都是在1958年到1968年这10年间被提出来的,后续再也没有新的编程范式出现过。
大家可能会问,这些编程范式的历史知识与软件架构有关系吗?当然有,而且关系相当密切。譬如说,多态是我们跨越架构边界的手段,函数式编程是我们规范和限制数据存放位置与访问权限的手段,结构化编程则是各模块的算法实现基础。这和软件架构的三大关注重点不谋而合:功能性、组件独立性以及数据管理。
第4章 结构化编程
结构化编程是分治,减治的开始
第5章 面向对象编程
- 封装被削弱 0分
- 继承提供便利 0.5分
- UNIX I/O多态
- 依赖反转
面向对象编程就是以多态为手段来对源代码中的依赖关系进行控制的能力,这种能力让软件架构师可以构建出某种插件式架构,让高层策略性组件与底层实现性组件相分离,底层组件可以被编译成插件,实现独立于高层组件的开发和部署。
第6章 函数式编程
不可变性与软件架构
为什么不可变性是软件架构设计需要考虑的重点呢?为什么软件架构师要操心变量的可变性呢?答案显而易见:所有的竞争问题、死锁问题、并发更新问题都是由可变变量导致的。如果变量永远不会被更改,那就不可能产生竞争或者并发更新问题。如果锁状态是不可变的,那就永远不会产生死锁问题。
这里的要点是:一个架构设计良好的应用程序应该将状态修改的部分和不需要修改状态的部分隔离成单独的组件,然后用合适的机制来保护可变量。软件架构师应该着力于将大部分处理逻辑都归于不可变组件中,可变状态组件的逻辑应该越少越好。
我们必须面对这种不友好的现实:软件构建并不是一个迅速前进的技术。今天构建软件的规则和1946年阿兰·图灵写下电子计算机的第一行代码时是一样的。尽管工具变化了,硬件变化了,但是软件编程的核心没有变。
第7章 SRP:单一职责原则
- 任何一个软件模块都应该只对某一类行为者负责。
- 产品服务的是一类行为 - 《俞军产品方法论》
https://weread.qq.com/web/reader/480322f072021a3248038c8k1f032c402131f0e3dad99f3