从2016年踏入开发这个行业里,Android,Flutter,React都有所接触后,代码语言一直在变但是有些东西却是一直不会变。

优化代码的第一步--单一职责原则

  单一职责原则英文缩写SRP,定义是:就一个类而言,应该仅有一个引起它变化的原因。字面意思比较奇怪,拆开来理解前半句 就一个类而言,在java中万物皆对象,而类在个人的理解是对于一部分的对象抽象取其共有结构划分到了一起,而这么抽象出来的类要求是仅有一个引起它变化的原因。这里其实就是对类的定义的时候加了一个约束条件了,类的功能尽量内聚,单一,这样才会不容易受到外界的影响。开发中多个功能模块放到一起,改某一功能的时候会影响到其他功能模块的代码时候,就需求考虑代码的结构问题了,类的抽取划分是否合理,这也是很多人代码改动很少但是bug却很多的原因。

让程序更稳定,更灵活--开闭原则

  开闭原则英文缩写OCP,定义是:软件中的对象(类,模块,函数等)应该对于扩展是开放的,但是对于修改是封闭的。这个在开发中很常见,每一版本的需求都会有功能的迭代,修改现有的代码在工作中是肯定存在,但是这也是往往出现问题的地方。这时候就需要对业务逻辑进行梳理,抽取不变的东西,这个时候往往就出现了接口。接口只是声明方法的名称和参数结构,但是具体的实现留给了具体的类来去实现。所以开闭原则要求的是要我们尽量的来使用接口来规定了功能的结构,而功能的具体实现开放出来随着业务去变动。而且不要让新功能代码改动去影响到老的代码。

构建扩展性更好的系统--里氏替换原则

  里氏替换原则英文缩写LSP,定义是:如果对每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象O2都替换成O1时候,程序P没有出现任何变化,那么类型S是类型T的子类型。比较长可以先倒着看,类型S要是类型T的子类型的时候,需要满足程序P使用类型T对象的地方都可以用类型S对象来代替。简单的说就是T能干的活S都能干,那S就是T的子类型。这里其实依赖于继承和多态的特性。基类存在的地方,子类都是代替存在,但是子类使用的地方,基类不一定能代替。在开发过程中,老的类可能不适用于新的开发场景下,我们就可以继承实现子类在不改老代码的情况下进行新的功能开发。这和开闭原则有些类似都涉及到了抽象,而抽象其实更多需要考虑到单一原则,功能的内聚,所以可以看到很多源码里的接口中往往只有几个方法甚至一个方法。

让项目拥有变化的能力--依赖倒置原则

  依赖倒置原则英文缩写DIP,定义是:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系通过接口或抽象类产生。用一句话来概括就是:面向接口编程,或者说是面向抽象编程。可以总结出几个关键点:1.高层模块不应该依赖低层模块,两者依赖抽象。2.抽象不应该依赖细节。3.细节应该依赖抽象。

系统更高的灵活性--接口隔离原则

  接口隔离原则英文缩写ISP,定义是:客户端不应该依赖它不要的接口。类间的依赖关系应该建立在最小的接口上,根据DIP原则来说类间通过接口来建立联系,而这个接口定义所要追求的就是越简单越好,感觉就像接口追求单一原则。

更好的可扩展性--迪米特原则

  迪米特原则英文缩写LOD,定义是:一个对象应该对其他对象有最少的了解,每个对象都必然会与其他对象有耦合关系,一个对象应该对其他对象保持最少的了解,通俗的来讲调用者或者依赖者只需要知道它需要的方法就行。

  了解原则的目的是为了更好的去了解优秀的开源代码的设计意图已经平时工作中完成任务的同时让我们的代码趋于这些规则。