美文网首页
OOP之「SOLID」

OOP之「SOLID」

作者: 木云先森 | 来源:发表于2020-04-01 00:13 被阅读0次

    SOLID

    面向对象设计原则

    英文简写 名称
    SRP 单一职责原则
    OCP 开放封闭原则
    LSP 里氏替换原则
    ISP 接口隔离原则
    DIP 依赖倒置原则

    1.单一职责原则

    一个类或成员方法,不能承担过多的职责。过多的职责,会增加代码直接的耦合性。


    tip:1.不同的应用场景,不同的阶段,会有不同的职责划分,以及对职责的不同的判定。如电商的商品模块,最开始可能只有几张表,库存,分类,属性都是杂合一起的,随着业务的增大和服务化,会有非常多更细的划分。读者只需知道一点,即为不是一成不变的划分
    2.杜绝过度设计。有些设计逻辑中,恨不能一个方法一个类。这很不现实,而且会增加大量的开发成本。
    不满足原则,需要拆分的可能情况

    1.类中的代码行数过多,属性和方法较多。
    2.依赖过多
    3.少量属性被大量的方法和逻辑使用

    2.开放封闭原则

    对扩展开放,对修改关闭



    tip:1.开闭原则是大部分设计模式所基于的逻辑
    2.很多时候使用继承和多态的方式
    3.在业务的实现过程中,其实就是尽可能的知道和理解业务的扩展走向,以及逻辑分离
    4.如上图所示,促销逻辑很大的任务就是计算促销的金额,但是促销的类型又有很多,只是个很好的扩展点。所以满减,满折,X件Y折,红包。都是对应的不同的扩展逻辑,可以根据业务的具体形态做增加和减少,以及后续的如第二件半价这种促销逻辑的扩展和增加

    3.里氏替换原则

    一个子类的实例,应该能够替换其任何超类的实例



    tip:1.由于继承比较有侵入性,会增加父类和子类的耦合。采用里氏替换的思想,可以极大程度上改善这种显现
    2.子类需要覆盖和实现父类的方法时,方法的形参要比父类的方法更加宽松
    3.子类可以增加自己的特殊方法

    4.接口隔离原则

    类不应该依赖不需要的接口



    tip:1.相对于单一职责来讲,接口隔离更侧重于接口的设计,方法的设计逻辑。
    2.具体接口和函数的设计,是否符合原则,也不是一成不变的。也是需要多维度的判断。

    5.依赖倒置原则

    高层模块不应该依赖底层模块(调用链中,调用者为高层),高层模块和底层模块
    应该通过抽象做对应的依赖。具体实现细节依赖抽象

    1.控制反转(IOC)

    把需要技术控制的过程,转义给框架层面。是一种设计指导思想

    2.依赖注入(DI)

    不通过内部做new的操作,再内部做实例化依赖的对象,而是通过构造方法或是参数的传递

    3.依赖注入框架

    比如spring、 google guice、thinkphp、laravel等提供了类似框架能力。只需要简单的配置,即可让框架来去实现具体的依赖关系,以及对象管理,和对象生命周期的管理。

    tip:1.理解了控制反转和依赖注入,会更好的理解依赖倒置的原则。
    2.依赖倒置的逻辑,基本上所有的框架产品的一种指导思想。毕竟不管多么庞大的功能,都是有模块组成的,模块都是有很多类组成的,类都是数据和方法组成的。所以,方法之间有依赖,类之间有依赖,模块间也有依赖。这些依赖,不可能都需要技术去实现和配置,所以很多的框架都是为了解决这些问题。

    相关文章

      网友评论

          本文标题:OOP之「SOLID」

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