simple responsibility principle 是指导代码编写的一条准则,通过让一个类或者一个模块的功能更加单一、更加细粒度的设计来满足适当的业务场景。
单一不单一要根据具体的业务场景来判断:场景不复杂的时候力度可以粗一些,后边随着重构在进行更细粒度的拆分。
拆分原则:
-
类属性或者方法过多、代码行数过多导致难以阅读
-
一个列依赖其他类过多,不符合高内聚、低耦合的思想时
-
类中大龄的方法都是在操作某几个属性
在以后的实际工作中可以尝试践行这些原则,所有原则的最终目的都是为了提高代码的可读性以及可扩展性可维护性等,以此作为最终的拆分标准。
2021年7月12日21点17分
设计模式最主要是为了解决代码的扩展问题,主要遵循的设计模式就是开闭原则。
Open Closed Principle 对扩展开放,对修改关闭,在不同的粒度(模块、类、方法等)定义也不同。
总的原则就是不破坏原有代码运行,不破坏原有的单元测试,尽量不修改代业务逻辑可以修改配置让修改更加少更加集中
开闭原则可以提高代码的可扩展性
How: 经验积累,时刻具有扩展意识,抽象、封装意识。
- 写代码前思考那些可变那些不可变
- 封装可变部分代码隔离,抽象不可变接口代码向外提供调用,当外部变换只需要扩展新的实现
- 基于 多态、依赖注入、基于接口而非实现,就是说将可变部分抽象出来,用一个新的类提供方法来依赖注入这些抽象类该方法的参数使用多态
sum:
- 了解业务 了解业务 了解业务 ,识别出将来需要扩展的地方
- 基于类似OPT的方法对最近易修改的业务进行扩展,对较远的以后进行重构
- 知识 + 经验 + 思考
- 不把设计模式当做真理,只有适合的才是最好的。
2021年7月13日
design by contract
what: 子类对象能偶替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变,正确性不被破坏。
多态和LSP的区别:多态可能破坏原来程序的逻辑。多态是面向对象编程语言的一种语法,而LSP是一种设计原则,用来指导继承关系中子类该如何设计。
从另一种角度来说:父类定义函数的行为规范,子类在设计的时候遵守父类的行为规范(就是函数的输入、功能、输出、异常等的约定),实际上定义中父类和子类之间的关系可以理解为接口于实现类之间的关系。
违反LSP的一些显然的例子
- 子类在实现功能逻辑时违背了父类声明要实现的功能。
- 子类违背父类定义的约定
- 子类违背注释等特殊说明
技巧: 判断子类的设计实现是否违背里氏替换
拿父类的单元测试去验证子类的代码。
自己的理解:里氏替换在可扩展的基础上保证了可维护性,确保实现遵循设计。