设计原则

常见设计原则概述


SOLID

DRY (Don’t Repeat Yourself)

在一个系统中,每一个知识都必须有一个单一、明确、权威的表示。

KISS原则KISS principle

绝大多数系统简单时比复杂时工作的要好。因此简单性是设计中的关键目标,并且应该避免不必要的复杂性。

迪米特法则Law of Demeter (LoD)

一个实体应该尽可能少的与任何其他的结构或者特性(包括子组件)发生关系,符合“信息隐藏”的原则。

契约式设计Design by contract (DbC)

软件设计者应该为软件组件定义规范、准确和可验证的接口,扩展了抽象数据类型的平凡定义,包括前置条件、后置条件和不变量。

封装Encapsulation

将数据与对该数据进行操作的方法捆绑在一起,或者限制对对象某些组件的直接访问。封装用于隐藏类中结构体对象的值或状态,防止未经授权地直接访问它们。

命令查询分离原则Command-Query-Separation(CQS)

函数不应该产生抽象的副作用,只允许命令(过程)产生副作用——Bertrand Meyer:《面向对象软件构造》

最小惊奇原则Principle of least astonishment (POLA)

系统的组件应该像人们期望的那样工作,而不应该给用户一个惊奇。

语言模块单元Linguistic-Modular-Units

模块必须与使用的语言单元相符合——Bertrand Meyer:《面向对象软件构造》

自文档Self-Documentation

一个模块的设计者应该努力使所有关于该模块的信息成为模块本身的一部分——Bertrand Meyer:《面向对象软件构造》

统一访问原则Uniform-Access

一个模块提供的所有服务都应该通过一个统一的符号来提供,而这个符号并不表明它们是通过存储还是通过计算来实现的。——Bertrand Meyer:《面向对象软件构造》

单一选择Single-Choice

每当软件系统必须支持一组备选方案时,系统中应该只有一个模块知道它们的底细。——Bertrand Meyer:《面向对象软件构造》

存储闭包Persistence-Closure

当存储一个对象时,必须将其所依赖的部分一起存储。每当检索机制检索以前存储的对象时,它还必须检索该对象的尚未检索到的所有依赖项。——Bertrand Meyer:《面向对象软件构造》