架构第二周总结
开闭原则(OCP)
模块、类、方法等应该对扩展开放、对修改关闭, 或者说添加一个新的功能应该是在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。
但是在实际开发中, 添加一个新功能,不修改任何模块、类、方法的代码,这个是很难的。类需要创建、组装、并且做一些初始化操作,才能构建成可运行的的程序,这部分代码的修改是在所难免的。需要做的是尽量让修改操作更集中、更少、更上层,尽量让最核心、最复杂的那部分逻辑代码满足开闭原则。只要它没有破坏原有的代码的正常运行,我认为就是一个合格的代码改动。
为了尽量写出扩展性好的代码,要具备扩展意识、抽象意识、封装意识。在写代码的时候后,要多花点时间往前多思考一下,这段代码未来可能有哪些需求变更、如何设计代码结构,事先留好扩展点,以便在未来需求变更的时候,不需要改动代码整体结构、做到最小代码改动的情况下,新的代码能够很灵活地插入到扩展点上,做到对扩展开放、对修改关闭。
里式替换原则(LSP)
子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑不变及正确性不被破坏。
父类定义了函数的协议,那子类可以改变函数的内部实现逻辑,但不能改变函数原有的协议。协议包括:函数声明要实现的功能;对输入、输出、异常的约定;甚至包括注释中所罗列的任何特殊说明。
从定义描述和代码实现上来看,多态和里式替换有点类似,但它们关注的角度是不一样的。多态是面向对象编程的一大特性,也是面向对象编程语言的一种语法。它是一种代码实现的思路。而里式替换是一种设计原则,是用来指导继承关系中子类该如何设计的,子类的设计要保证在替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性。
单一职责原则(SRP)
一个类或模块只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。
不同的应用场景、不同阶段的需求背景、不同的业务层面,对同一个类的职责是否单一,可能会有不同的判定结果。
接口隔离原则(ISP)
客户端不应该被强迫依赖它不需要的接口。
单一职责原则针对的是模块、类、接口的设计。接口隔离原则相对于单一职责原则,一方面更侧重于接口的设计,另一方面它的思考角度也是不同的。接口隔离原则提供了一种判断接口的职责是否单一的标准:通过调用者如何使用接口来间接地判定。如果调用者只使用部分接口或接口的部分功能,那接口的设计就不够职责单一。
依赖反转原则(DIP)
依赖倒置原则(DIP)主要用来指导框架设计.
高层模块不依赖低层模块, 他们共同依赖同一个抽象, 抽象属于高层模块;
抽象不要依赖具体实现细节, 而是具体实现细节依赖抽象.
DIP 倒置了什么
模块或包的依赖关系
开发顺序和职责
软件的层次化
高层决定低层
高层被重用
评论