软件构建中的设计
2019-12-08 本文已影响0人
卖女孩的小火柴18
前言
最近在编写设计文档时,参考《代码大全》,其中有很多观点值得参考。可以根据一些设计点反思自己的设计是否足够完善。
看完后,了解到设计有两个重点:
- 设计越简单越好
- 模块越清晰,越可分离越好
软件设计
作为开发人员,不应该试着一次性将大量程序塞进自己的大脑。一个时刻可以专注于一个特定的部分,考虑得才会越精细、透彻。软件设计目标:将系统分解为多个子系统,子系统间相互依赖越少越好。保持子程序的短小精悍有助于减少思考的负担。有句话叫做:程序是给人看的,顺便给电脑运行的。设计也是一样,要设计出让人接收起来没有那么多负担的代码设计。
在对模块进行划分的时候,其实也是对模块进行抽象的过程。抽象就是用简化的观点来考虑复杂的概念。模块的内部实现方式不对外公开,外部只需要知道一些接口,即可进行交互。
设计也有多种模块,比如抽象工厂、适配器、组合等等,可以参考书籍《设计模式》。
理想的设计特征
- 最小的复杂度。做出简单而且易于理解的设计。
- 易于维护。设计出能够容易阅读的系统和代码。
- 松耦合度。通过抽象、信息隐藏等原则,减少子系统间的关联。关联越少,集成、测试、维护工作量也会少。
- 可移植性。方便移植到其他系统。
- 精简性。设计出的代码,对于要实现功能,每行代码都是必需大的,保持阅读和功能的情况下,代码量最少。
如何开启设计
- 创建中央控制点。对于每一段有用的代码,只有一个唯一的地方可以看到它,并可以被控制在模块中。
- 为测试而设计。为了能够更有效地测试每个模块内容,就容易产生更规整的接口。
- 画一个图。在更高的抽象模式上表达问题。
- 尝试使用多种设计方案,尝试设计的可能性越多,最终设计方案越好。
软件设计规则
- 是否分解得足够,系统->子系统->组件->子程序。子系统负责根据上层设计完成详细的功能。
- 程序中不应该有环形关系。即A依赖B,B依赖C,C又依赖A模块。环形模块会让系统变得复杂,难以测试和维护。
- 模块间的交互关系,是否已经设计为最小化了。
- 是否有助于最小化偶然性。