西梧 runtime

好代码的味道,一定要了解下SOLID原则

  • 2022-03-10 10:13:59
  • qtsunami

在程序设计领域,罗伯特·C·马丁在21世纪引入了SOLID原则,SOLID并非单纯的一个原则,而是由五个设计原则组成的,分别是单一职责原则、开闭原则、里式替换原则、接口隔离原则和依赖反转原则,各原则的英文首字母依次对应SOLID中的S、O、L、I、D五个英文字母。

SOLID原则的主要作用就是告诉我们如何将数据和函数组织成为类,以及如何将这些类组装起来成为程序。这里的“类”仅仅代表了一种数据和函数的分组。

<a name="whyn3"></a>

单一职责原则

单一职责原则的英文是Single Responsibility Principle,缩写SRP。

**单一职责就是一个接口、一个类或者一个模块只负责完成一个职责或者业务功能。**我们在实际业务开发时,不可能完全按照这种原则去开发的,从另一方面来说,其实是提醒我们不要一味的去设计大而全的类,要设计粒度比较小、功能单一的类或接口。

从实用角度来说,如果一个类里面包含了两个或者两个以上不相干的功能,那么就可以认为它的职责不够单一,应该将它拆分成多个功能单一的类。至于如何拆分,拆分的粒度是什么?主要取决于业务。

我们都知道,一个好的架构是不断演进的,而一个好的代码设计也是需要演进的,我们没有必要一开始就过度设计,在初始时,可以先设计一个粗粒度的类,满足业务需求。而随着业务的发展,代码越来越多时,这个时候就需要将代码进行拆分重构了。

单一职责原则就是为了实现代码高内聚、低耦合,同时提升代码的复用性、可读性以及可维护性。

<a name="zVESg"></a>

开闭原则

开闭原则的英文全称是Open/Closed Principle,缩写OCP。

开闭原则是指模块、类或者方法等应该对扩展开放,对修改关闭。比如我们需要添加一个新的功能,那么我们应该在已有代码基础上扩展代码,如新增模块、新增类或方法,而不是修改已有的代码(在原有的功能模块、类或者方法上修改)。

其实我们常用的设计模式,基本上都是为了解决代码扩展性的问题,而这些设计模式遵从的设计原则就是开闭原则。所以,开闭原则的核心就是解决代码的扩展性问题。

最直白的描述就是,我们在写代码的时候要考虑到扩展性、封装性,比如多考虑面向对象的思想,继承、封装和多态,依赖注入模式,基于接口编程等。写代码时也要考虑到未来需求变更的时候,如果在不改动整体结构的前提下,做到最小代码改动来实现需求。

<a name="di6Ys"></a>

里氏替换原则

里氏替换原则的英文全称是Liskov Substitution Principle,缩写LSP。

里氏替换原则就是子类对象能够替换程序中父类对象,并且还要保证原有程序的逻辑行为不变及正确性不被破坏。也就是说,子类要可以替换父类。

LSP原则一般是应用在子类要重写父类时要遵循的设计原则。

<a name="BqwBQ"></a>

接口隔离原则

接口隔离原则的英文全称是Interface Segregation Principle,缩写ISP。

要使用客户端特定的细粒度接口,不要强迫调用者去依赖他不适用的接口,也就是说,使用多个特定的接口比要使用一个接口要更合适。

理解ISP原则,最主要的是要做到以下两点:

  • 一个类对另一个类的依赖性,要将接口粒度最小化,如果部分接口只被部分调用 者使用,我们就需要将这部分接口隔离出来单独给这部分调用者使用。
  • 客户端程序不应该依赖它不需要的接口方法,客户端需要什么接口就提供什么接口,把不需要的接口剔除掉。也就是接口设计要尽量单一。 <a name="reUnt"></a>

依赖反转原则

依赖反转原则的英文全称是Dependency Inversion Principle,缩写DIP。

也可以依赖倒置原则。这条原则主要是用来指导框架层面的设计,高层模块不要依赖低层模块,高层模块与低层模块应该通过抽象来互相依赖。

开闭原则(OCP)是面向对象设计原则的基础也是整个设计的一个终极目标,而依赖倒置原则(DIP )则是实现OCP原则的一个基础,换句话说开闭原则(OCP)是你盖一栋大楼的设计蓝图,那么依赖倒置原则就是盖这栋大楼的一个基础框架。

依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。

© 2023 By 西梧Runtime.    本站博客未经授权禁止转载   |   京ICP备15032626号-1