写点什么

架构师训练营第二周”框架设计“学习笔记

用户头像
随秋
关注
发布于: 2020 年 12 月 06 日

编程语言的发展

  • 编程的目的是用计算机来解决现实世界的问题

  • 编程是一种抽象的过程,将现实世界中的模型抽象成计算机所能理解的模型的过程

"抽象"的发展

  • 面向机器的编程:汇编

  • 非结构化的高级语言:对计算逻辑进行抽象

  • 结构化程序设计:对问题领域进行一定的抽象

  • 面向对象的程序设计:对领域问题进行抽象

面向对象编程

面向对象的目的是:强内聚,低耦合

  • 封装

  • 对外提供接口

  • 隐藏内部实现细节

  • 继承

  • 通过继承实现重用

  • 多态

  • 对象互换的魔法

  • 面向对象编程,利用的是面向多态特性进行编程

设计臭味

好的软件设计:

  • 易扩展

  • 更强壮

  • 可移植

  • 更简单

不好的软件设计:

  • 僵化:变更艰难,代码牵扯较多,牵一发动全身

  • 脆弱:对一处的修改会引入其他无关模块新的问题

  • 牢固性:不可复用

  • 不可移植

  • 晦涩,代码难以理解

  • 过度设计

OOP 设计原则

开闭原则 OCP

对扩展是开放的,对更改是封闭的。不需要修改软件实体就可以实现功能的扩展

策略模式

定义一系列的算法(策略),每一个策略都封装起来,策略之间可以相互替换。让策略独立于使用它的主体。

  • 策略之间相互独立,符合开闭原则

  • 使用者必须知道所有类,并且自行决定使用哪个类

适配器模式

增加一个中间层,即适配器,将一个接口(类)转换成使用者希望的另一个接口(类),而不是直接使用,以到达解耦的目的。

适配器模式更多解决不兼容问题。

观察者模式

定义一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

又称之为发布-订阅模式,源-监听模式

  • 观察者与被观察者,观察者之间相互独立,符合开闭原则

  • 观察者如果太多,所有都通知到会花费一些时间。

依赖倒置原则 DIP

  • 高层模块不能依赖底层模块,而是依赖抽象

  • 抽象不能依赖实现,而是实现依赖抽象。实现依赖接口,实现接口。

  • 高层定义接口规范,低层实现,高层调用低层,但又不依赖低层


Don't call me, I'll call you.就是著名的好莱坞原则。演员将建立交给演艺公司后回家等待,演绎公司完成对整个项目的控制,演员只需要被动接收公司的安排,在需要是完成自己的任务即可。

对应的软件设计中,应用(低层)按照接口规范实现功能,框架(如 Tomcat 之类)调用应用程序代码,而不是应用程序调用框架。

里式替换原则 LSP

使用场景中,子类必须能够替换他们的基类,是一个关于继承的问题。

  • 凡是使用基类的地方,一定适用于子类

  • 子类可以扩展父类的功能,但不能改变父类原有的功能

  • 如果仅仅想使用基类的方法,可以使用组合方式

  • 必须考虑场景,不能孤立的看待是否符合 LSP,必须看具体的使用程序

单一职责原则 SRP

  • 一个模块内部的功能具有相关性,内聚性原则

  • 一个类,只能有一个引起它变化的原因。如果类的功能太多,耦合严重,当某一块发生变化时,会引起类不必要的修改,从而引入 bug。

接口隔离原则 ISP

  • 不应该强迫客户程序依赖他们不需要的方法

  • SRP 主要对类的约束,注重类的职责单一

  • ISP 是对接口的约束,强调接口的隔离

迪米特原则

(课堂没涉及这块)

一个对象应该对其他对象保持最少的了解。

为了降低类之间的耦合,可能需要引入一个中间层,势必会导致系统复杂,因此采用迪米特原则需要反复衡量。

总结

这一节主要讲框架设计原则,主要是面向对象设计的原则。

  • "面向对象"怎么来的

劳动生产的三要素:工具(计算机)、劳动者(人、程序员)、劳动对象(业务领域)。

  • 面向机器编程:让机器可以实现计算功能,对人很不友好

  • 面向过程编程:对人友好,易于使用

  • 面向对象编程:对显示业务的抽象实现,领域模型->业务模型->实现落地

  • 面向对象解决什么问题

  • 易扩展、更强壮、可移植、更简单

  • 对应另一面就是代码僵硬、脆弱、不可移植、晦涩难懂等

  • 如何实现面向对象,软件设计的六大基本原则(课堂提到了 5 个)

  • 开闭原则

  • 依赖倒置原则

  • 里式替换原则

  • 单一职责原则

  • 接口隔离原则

  • 迪米特原则


用户头像

随秋

关注

还未添加个人签名 2018.04.27 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第二周”框架设计“学习笔记