面向使用的软件设计阅读笔记01
有些概念性的说法可能理解不是很到位,
好比复杂性的组成因素的定义是:依赖性是指模块无法独立于其他模块而被理解。
模糊性是指在重要信息不明确的情况下这往往是因为缺乏文档。复杂性是由模糊性和依赖性造成的。
复杂性管理为什么如此具有挑战性?这是因为复杂性是递增的,前面做出的每一个决策,都可能导致后面的设计越来越复杂。
为了避免复杂性不断递增,建议区分战略性编程和战术性编程。
战术性编程是专注于让代码能够跑起来,但这使得它几乎不可能产生好的系统设计。
相反,战略编程会转移目标重心。战略性编程是意识到光有能运行的代码是不够的。
最主要的目标应该是有一个不仅能够运行,还能解决问题的好的系统设计。
理想情况下,假如你从一开始就考虑到更改系统设计时,会带来的变化,那么当你完成每个变更时,系统就会变成你一开始预想的那个结构
很多人会反对这种对抽象的关注,认为它没有什么太大的用处,因为你并不需要它,他会认为一个好的设计很快就能得到回报。
如果能把复杂性隔离在一个模块,不与其他模块相关联,就达到了消除复杂性的目的。
而管理复杂性最重要的方法是从接口转移到实现中:模块是接口和实现。解决方案就是“定义不存在的错误”,即设计不会出现Bug的接口。
这可能就涉及到大型软件开发设计了,虽然不是很理解,但感觉是有实际效用的。