本文分类:
软件理论与软件工程

约定优于配置(Convention Over Configuration,COC)

即基于契约设计(Design By Contract,DBC),开发前约定好一些规则,然后大部分情况下就只需要按约定编程而无须配置文件,仅需要对应用中不符约定的部分进行配置,这样虽然损失了一些的灵活性,但可以减少配置,降低复杂性和学习成本。

组合优于继承(Composition Over Inheritance,COI)

优先使用组合而非继承。组合是一种HAS-A关系,是一种运行时关系,而继承是一种IS-A关系,子类了解父类的实现,破坏了封装,而且继承是一种编译时关系,所以组合比继承具有更大的灵活性和更稳定的结构。

单一指责原则(Single Responsibility Principle,SRP)

就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责太多,那么就相当于把这些职责耦合在一起,任何职责的变化都可能引起其他职责的实现改变。该原则的难点在于如何界定职责。

开放关闭原则(Open-Closed Principle,OCP)

一个类应该对扩展开放,对修改关闭。实现该原则的关键是合理的抽象,分离出变化和不变的部分,为变化的部分留下扩展的空间。实际开发中做到适度抽象即可,过度抽象是一种过渡设计,只会增加系统复杂性。

里氏替换原则(Liskov Substitution Principle,LSP)

子类型必须能够完全替换掉它的父类型,即子类和超类应该是IS-A关系。只有当子类可以替换掉超类,超类才能真正被复用,LSP是实现继承和多态的基石。

依赖倒置原则(Dependence Inversion Principle,DIP)

高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于具体实现,具体实现应该依赖于抽象。也称好莱坞原则,描述为不要找我们,我们会联系你。依赖倒置原则实际上就是面向接口编程。

接口隔离原则(Interface Segregation Principle,ISP)

不要强迫客户依赖于他们不用的方法。方法太多的接口称为胖接口,它会导致使用者之间产生有害的耦合关系,这同时也违反了SRP原则,解耦的方法就是分解接口。

最少知识原则(Least Knowledge Principle,LKP)

也称为迪米特法则(Law of Demeter,LoD),一个对象应当对其他对象有尽可能少的了解,也描述为只和你的朋友说话。这里的朋友类包括:a.当前对象本身;b.通过方法参数传入的对象;c.当前对象的实例变量直接引用的对象;d.当前对象的实例变量如果是一个集合,那么集合中的对象也都是朋友类;e.当前对象所创建的对象。

简约(Keep it simple & stupid,KISS)

大部分系统的设计越简单越好,所有不必要的复杂性都应该避免。如果一个系统非常复杂,就应该分解为多个简单的组件,做好足够的分解和抽象。

避免重复(Don’t Repeat Yourself,DRY)

在一个系统里,对于任何数据或者变量,都应该配置在有且只有一个地方,其他的地方都应该引用这里的数据。这样,需要改动数据的时候,只需调整这一处,所有的地方就都变更过来了。

最后

原则是用来指导而非限制设计的,设计的艺术在于权衡,所以在实际设计和开发中,应该是理解原则、应用原则,而非拘泥原则。

本文来自 [时光记 - 王智超的个人空间](www.hiwzc.com),转载请注明出处。