「架构师训练营」第 2 周学习总结
软件设计的最终目的
我们在做程序设计的时候,最终要设计的目的是什么,为什么要去做这些设计?
明确我们设计的目的,才能有的放矢,最终做出一个好的设计。
易扩展 - 易于增加新的功能
更强壮 - 不容易被粗心的程序员破坏
可移植 - 能够在多样的环境下运行
更简单 - 容易理解、容易维护
OOD设计原则
要达到我们设计的目的,有一些方法论,就是设计原则。
开/闭原则(OCP)
OCP - Open/Closed Principle
对于扩展是开放的。 (Open for extension)
对于更改是封闭的。(Closed for modification)
依赖倒置原则(DIP)
DIP - Dependency Inversion Principle
高层模块不能依赖低层模块,而是大家都依赖于抽象。
抽象不能依赖实现,而是实现依赖抽象。
Liskov替换原则(LSP)
子类型必须能够替换掉它们的父类型。
单一职责原则(SRP)
SRP - Single Responsibility Principle
又被称为“内聚性原则”,一个模块的组成元素之间的功能相关性。
一个类,只能有一个引起它的变化的原因。
接口分离原则(ISP)
ISP - Interface Segregation Principle
不应该强迫客户程序依赖它们不需要的方法。
通过此节课,我又更加深入的去理解了每一个设计原则的核心思想以及为什么要这么做。
OCP原则,当需求发生变更时,需要对程序进行新需求的实现。一个好的设计,使我们只需要去外部扩展原有的代码,而不是去修改内部的逻辑。这实现前面设计的最终目的中的“易扩展”、“更强壮”。
DIP原则,使得高层模块不依赖低层模块,而是都依赖抽象。这个抽象其实是一个对编程的对象特性的抽象,相当于制定了一个契约或规范。上层按照此契约使用,低层去实现此契约,从而完成了高层、低层的解耦。
LSP原则,也是为了更好的扩展。一个抽象的实现可以被替换为另一个实现,而无需修改其他代码。比如我们原有需求是通过支付宝支付,后面需求增加了一项要支持微信支付。支付宝支付和微信支付都是支付的子类,可以被替换成任何一个子类。
SRP原则,让不相关的方法尽量不要在一个接口里,是为了更容易阅读、维护,也是程序更健壮。试想一个大而全的接口类,任何一个功能修改都要去修改那个接口类,势必造成难维护、阅读困难的结果。
ISP原则,让客户程序只能看到自己需要的方法,避免因为误调用其他不应它调用的方法,而造成系统错误。这也体现了设计目的的“更强壮”。
细品每个设计原则,都是前辈们的经验总结,能够帮助我们开发出更易扩展易维护,更强壮,且易读的代码。
评论