要预测软件的复杂度,影响理解能力的第一要素是规模。
Technical debt: 无法避免技术债
1. 针对目前需求和做出来的程序,看似合理的技术决策,都会随着软件的演变而变得不堪一击
2. 需要债务清晰可视化,通过方案主动地降低
Legacy system: 衰亡的老年期,遗留系统
软件开发遇到的拥堵:
1. 函数存在副作用,调用时可能对函数的结果做了隐含的假设。
2. 类的职责繁多,导致开发人员不敢轻易修改,因为不知道会影响到哪些模块。
3. 热点代码被频繁修改变更,职责被包裹了一层又一层,没有清晰的边界。
4. 在系统某个角落,隐藏着伺机而动的bug。当诱发条件具备时,就会让整个调用链瘫痪。
5. 不同的业务场景包含了不同的例外场景,每种例外场景的处理方式都各不相同。
6. 同步处理代码与异步处理代码纠缠在一起,不可预测程序执行的顺序。
无序设计
1. 代码没有显而易见的进入系统中的路径。
2. 不存在一致性,不存在风格,也没有能够将不同的部分组织在一起,形成一个统一概念。
3. 系统中的控制流让人觉得不舒服,无法预测。
4. 系统中有太多的“坏味道” “不优雅”。
5. 数据很少放在它被使用的地方,经常引入额外的巴洛克式缓存层,视图让数据停留在更方便的地方。
避免 过度设计, 也要避免 设计不足