代码异味和面向对象的设计原则

代码异味(code smell)

代码异味,表示代码中有的地方有变坏的征兆。包括:

  • 僵化性(Rigidity)
    很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其他改动
  • 脆弱性(Fragility)
    对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题
  • 牢固性(Immobility)
    很难解开系统的纠结,使之成为一些可在其他系统中重用的组件
  • 粘滞性(Viscosity)
    做正确的事情比做错误的事情要困难
  • 不必要的复杂性(Needless Complexity)
    设计中包含有不具任何直接好处的基础结构
  • 不必要的重复(Needless Repetition)
    设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一
  • 晦涩性(Opacity)
    很难阅读、理解。没有很好地表现出意图

面向对象的设计原则

单一职责原则(SRP)

就一个类而言,应该仅有一个引起它变化的原因

开放-封闭原则(OCP)

  • 软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是,对于修改是封闭的
  • 原因:在软件的生命周期里,因为变化、升级和维护等原因,需要对原有代码进行修改时,可能将错误引入原本已经经过测试的旧代码中,破坏原有系统

Liskov替换原则(LSP)

  • 定义一:如果对每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象O1都代换成O2时,程序P的行为没有发生变化,那么类型S是类型T的子类型
  • 定义二:所有引用基类的地方必须能透明地使用其子类的对象

依赖倒置原则(DIP)

关键点:

  • 高层模块不应该依赖低层模块,两者都应该依赖其抽象
  • 抽象不应该依赖细节
  • 细节应该依赖抽象

Java开发中:

  • 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的

接口隔离原则(ISP)

  • 定义一:客户端不应该依赖它不需要的接口
  • 定义二:类间的依赖关系应该建立在最小的接口上
  • 具体:将非常庞大、臃肿的接口拆分成更小的和更具体的接口

最少知识原则(LOD)

  • 一个对象应该对其他对象有最少的了解
  • 具体:一个类应该对自己需要耦合或调用的类知道的最少,类的内部如何实现与调用者或者依赖者没关系。类与类之间的关系越密切,耦合度越大。

你可能感兴趣的:(代码异味和面向对象的设计原则)