Good design depends on understanding a handful of key concepts.
好的设计取决于对一些关键概念的理解。
高质量的设计都有几个一般化的特征。
那么,这些一般化的特征都有哪些呢?
特征清单
-
最小的复杂性(Minimal complexity)
设计的最主要目标应该是管理好复杂性,使软件开发过程尽可能只有最小的复杂性。
好的设计应该是简单的并且易于理解的,而不是过于复杂难于理解的。
-
可维护性(Ease of maintenance)
在设计过程中不断的思考将来维护这个系统的程序员会问什么问题,把自己当作将要维护这个系统的程序员。
尽可能做出一目了然的、明白易懂的、不言自明的设计。
-
松耦合性(Loose coupling)
松耦合性意味着设计时要尽可能的降低程序各个不同部分之间的连接。
在类的设计、封装、信息隐藏时使用好的抽象原则可以尽可能的降低类之间的相互连接。
-
可拓展性(Extensibility)
这个特性意味着当需要增强系统原有功能或添加新特性的时候,可以在不破坏原有底层结构的情况下实现。
修改了系统的一部分,不会影响系统的其他部分。
-
可重用性(Reusability)
这个特性意味着可以在其他系统中重用当前系统中设计好的组件。
-
很高的扇入(High fan-in)
扇入这个概念是指直接调用该模块的上级模块的个数。
扇入大些,一般不会影响系统的复杂性,而且扇入越大,说明该模块的复用性越好。
高扇入意味着系统被设计为充分利用系统中较低级别的实用程序类。
-
中低等的扇出(Low-to-medium fan-out)
扇出这个概念是指该模块直接调用的下级模块的个数。
扇出过大表示模块的复杂度高,需要控制和协调过多的下级模块。
系统设计时应该考虑到一个模块的扇出不宜过大,一般认为不要超过7。
-
可移植性(Portability)
这个特征意味着设计好的系统应该可以很容易的移动到另一个环境当中。
-
精简(leanness)
精益意味着设计系统,使其没有多余的部分。
-
分层(Stratification)
分层意味着你可以在任意单一层级上看待这个系统而不需要研究其他层级。
比如最常见的接口层和实现层,你想使用某个接口时,只需要看这个接口提供什么功能,需要什么参数,会返回什么值就行,不需要再深入关系它的实现是什么。这就是一个分层的思想。
-
标准技术(Standard techniques)
一个系统越是采用脱离常规的方法设计,越会让第一次尝试理解它的人感到困惑不已。
在设计时尽可能使用标准化的、常用的方法让整个系统看起来比较熟悉。
使用设计模式就是一种特别有价值的标准化技术。
以上内容总结来自《Code Complete 2: A Practical Handbook of Software Construction》第二部分第5章节第2小节:Key Design Concepts