美文网首页
SOLID设计原则

SOLID设计原则

作者: 晓龙酱 | 来源:发表于2017-09-18 12:43 被阅读28次

    Single Responsibility Principle(单一职责原则)

    面向接口编程中:

    • 接口设计要做到单一
      不要混合不同用途的方法,复杂接口拆分成若干接口
    • 接口方法参数单一
      不要有很多参数同时修改很多数据,也要拆分成若干接口

    类设计:

    • 功能单一
      一个类不要聚集太多功能,做到仅有一个原因引起对类的修改。
    • 合理划分粒度
      类的功能不能划的太细,否则会造成类数量太多,同时类间组合增加,也造成了高耦合。
      类的功能也不能划的太粗,否则一个类功能太多,动不动就要被修改。

    好处:

    • 类的复杂性降低
    • 可读性提高
    • 可维护性提高
    • 变更引起的风险更低

    Open Closed Principle(开放关闭原则)

    对扩展开放,对修改关闭;拥抱扩展,拒绝修改。

    • 通过添加新的子类来扩展功能
    • 不要通过修改当前类去扩展功能

    好处:

    • 便于测试
      只需要测试新添加的子类,因为以前的类并没有修改。
    • 提高复用性
      扩展方式带来了更多的代码复用
    • 提高可维护性

    实现:

    • 抽象约束
      a. 通过接口,抽象类约束扩展,对扩展进行边界限定
      b. 引用对象,使用接口或抽象类,而不是实现类
      c. 抽象层保持稳定,不随意修改

    • 元数据控制模块行为
      即配置化,通过配置来完成功能设定,而不是修改代码

    • 制定开发规范
      按照规范进行需求开发,功能扩展,以达来良好了代码结构

    • 封装变化
      a. 将相同的变化,封装到一个接口,或抽象类中
      b. 将不同的变化,封装到不同的接口,或抽象类中

    Liskov Substitution Principle(里氏替换原则)

    简单的说,方法中的参数类型声明为接口或抽象类,方便调用时传入不同子类的对象。

    “父类能出现的地方,子类就能出现;但子类出现的地方,父类不一定能出现”,意思是说如果方法的参数是基类,则可以传入任意子类对象,但如果参数是子类型,则不一定可以传入基类对象了。

    前置条件:

    • 方法的输入参数,子类方法的前置条件范围,比父类方法前置条件范围大;反之则不行。

    • 数据流为,从父类到子类,从外到内。所以父类方法参数对象,要能转换成子类方法参数对象,所以子类参数要是父类参数的基类。

    后置条件:

    • 方法的返回参数,子类方法的后置条件范围, 比父类方法后置条件的范围小。

    • 数据流为,从子类到父类,从内到外。所以子类方法参数对象,要能转换成父类方法参数对象,所以父类参数要是子类参数的基类。

    Interface Segregation Principle(接口分离原则)

    意思是接口要细分,不能用一个接口实现太多用途的方法,因为实现类要实现那些不会用到的方法

    控制好接口的粒度很重要,太细会倒置接口数量剧增,使用麻烦;粒度太大,灵活性降低,无法提供定制服务

    接口分离与单一职责看起来很像,但其实角度是不同的。单一职责是从业务的角度去分析,业务功能是不是单一;而接口分离,则是说一个接口中的方法不应该太多,对不同的调用模块,提供不同的接口。

    Law of Demeter 迪米特法则

    也称最少知识原则。
    一个对象,应该对其它对象有最少的了解。私有化不需要公开的接口。公开的接口越多,修改时带来的风险也就越多。

    Dependency Inversion Principle(依赖倒置原则)

    就是面向接口(或抽象类)编程,方法的接口参数类型,要使用接口或抽象类型,避免依赖具体的实现类

    • 接口或抽象类不依赖于实现类
    • 实现类依赖接口或抽象类
    • 模块间通过抽象发生依赖,实现类间不发生直接依赖,而是通过接口或抽象类产生依赖

    相关文章

      网友评论

          本文标题:SOLID设计原则

          本文链接:https://www.haomeiwen.com/subject/jywvsxtx.html