单一职责原则
SRP (Single Reposibility Principle )
定义:单一的类或模块只负责完成一个职责
里氏替换原则
LSP (Liskov Substitution Principle)
定义:所有使用父类的地方可以使用子类的对象,子类可以扩展父类的功能,不可以替换父类的功能。如果要替换父类功能,建议–多用组合,少用继承。
含义:
1> 里氏替换原则是针对继承而言的,如果继承是为了实现代码重用,也就是为了共享方法,
那么共享的父类方法就应该保持不变,不能被子类重新定义。子类只能通过新添加方法来扩
展功能,父类和子类都可以实例化,而子类继承的方法和父类是一样的,父类调用方法的地
方,子类也可以调用同一个继承得来的,逻辑和父类一致的方法,这时用子类对象将父类对
象替换掉时,当然逻辑一致,相安无事。
2> 如果继承的目的是为了多态,而多态的前提就是子类覆盖并重新定义父类的方法,为了
符合LSP,我们应该将父类定义为抽象类,并定义抽象方法,让子类重新定义这些方法,当
父类是抽象类时,父类就是不能实例化,所以也不存在可实例化的父类对象在程序里。也就
不存在子类替换父类实例(根本不存在父类实例了)时逻辑不一致的可能
依赖倒置原则
DIP:Dependence Inversion Principle
定义:下层模块引入上层模块的依赖,改变原有自上而下的依赖方向。
自上而下,domain层依赖infra层,关注infra层具体实现
自下而上,domain层暴露出接口,不关注接口如何实现,infra去实现接口。
接口隔离原则
定义:建立单一接口,不要建立臃肿庞大的接口。接口尽量细化,同时接口中的方法尽量少。
含义:
① 接口要尽量小
不要违反单一职责原则。
要适度的小,要适度。
② 接口要高内聚
提高接口、类、模块的处理能力,减少对外的交互。
③ 定制服务
通过对高质量接口的组装,实现服务的定制化
迪米特法则/最少知识原则
LoD:Law of Demeter
定义:只和你的密友谈话。
具体解释:一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂,那是你的事儿,和我没关系,我就知道你提供的这么多public方法,我就调用这么多,其他的我一概不关系
开闭原则
定义:类、方法、模块应该对扩展开放,对修改关闭。
含义:添加一个功能应该是在已有的代码基础上进行扩展,而不是修改已有的代码