面向对象程序设计的那些编码原则

164 阅读4分钟

DRY

Don't repeat yourself 的缩写,即“不要重复自己”。或者是Once and only once(OAOO),一次且仅一次。其涵义是“系统中的每一部分,都必须有一个单一的、明确的、权威的代表”。即不能含有任何重复代码。

YAGNI

You aren't gonna need it 的缩写。YAGNI 是极限编程的原则,意味只有真正需要的功能才去开发它。提倡尽快地让软件运行起来。

Rule Of Three

即三次原则。指的是当某个功能出现第三次的时候才进行抽象。

KISS

Keep It Simple, Stupid 的缩写。其含义注重简约,不要加入非必要的复杂性,即“尽可能保持简单”。

与 YAGNI 的区别是,KISS 强调的是简单地做,YAGNI 强调的是非必要不要做

SRP

The Single Responsibility Principle,单一职责原则。一个类或一个方法的职责应该明确且单一。

该原则与下面的 OCP, LSP, ISP, DIP 合称 SOLID。是面向对象编程,设计模式的基础原则。

OCP

The Open Closed Principle,开放封闭原则。软件实体(类,接口,方法等)应该对扩展开放,对修改关闭。即应该以扩展,继承等方式新增功能,而不是修改接口,修改原有的代码。可以总结为用抽象构建框架,用实现扩展细节。

LSP

The Liskov Substitution Principle,里氏替换原则。所有引用基类的地方必须能透明地使用其子类的对象。该原则是继承的基石。使用基类的地方可以用衍生类替换而不影响功能,即扩展子类不会对基类原有功能造成影响。

ISP

The Interface Segregation Principle,接口分离原则。多个特定职责的接口要比一个通用性的接口更好。当要实现一个复杂的类时,应该实现多个单一职责的接口,而不是把多个功能放到一个接口里。

DIP

The Dependency Inversion Principle,依赖倒置原则。抽象不应该依赖实现,实现应该依赖抽象;高层模块不应该依赖底层模块,这两者都应该依赖抽象。

LOD

Law of Demeter,迪米特原则,也叫最少知道原则。一个类应该对其他类保持最少的了解。该原则意为降低类之间的耦合,减少类间不必要的耦合关系。

CRP

Composite Reuse Principle,合成复用原则。即尽量使用组合而不是继承来达到复用的目的。

GRASP

General Responsibility Assignment Software Patterns,通用职责分配软件模式。一共包括了九种模式,描述了对象设计和职责分配的基本原则,讲述了如何将业务抽象成代码,提供了最基础的指导原则。SOLID 原则是在其之上的进一步描述。

Information Expert

信息专家模式。如果某个类拥有执行某个职责所必要的信息,则将这个职责分配给这个类。

Creator

创造者模式。符合下面某个条件时,都应该由类A来创建类B,这时A是B的创建者:

  1. A 是 B 的聚合
  2. A 是 B 的容器
  3. A 拥有初始化 B 的信息
  4. A 记录 B 的实例
  5. A 频繁使用 B

Low coupling

低耦合模式。意为尽可能减少类之间的连接。低耦合降低了因一个类的变化而影响的其他类的范围。以下的情况会造成A,B 之间的耦合:

  1. A 是 B 的属性
  2. A 调用 B 的实例方法
  3. A 的方法包含对 B 的引用
  4. A 是 B 的子类

High cohesion

高内聚。即功能紧密相关的职责应该放在一个类中实现,并共同完成有限的功能。这样有利于降低类的复杂性,有利于维护。

Controller

控制器。将接收和处理系统时间的职责分配给一个类,用这个类来代表整个系统。

Polymorphism

多态。即为面向对象的三大特征之一。当相关选择或行为随类型改变而改变时,用多态为行为变化的类型分配职责。

Pure Fabrication

纯虚构模式。虚构一个与问题域无关的类,为其分配高内聚的职责或行为,以解耦问题域中的其他对象,达到高内聚,低耦合的目的。

Indirection

间接。将一些职责分配给中间对象,用其连接两个模块,以降低这两个模块的耦合度。

Protected Variations

受保护变化。预计不稳点的变化点,抽象成接口,未来通过接口扩展功能,而不需要修改原有的实现。