写点什么

week2 框架设计 作业和学习总结

用户头像
杨斌
关注
发布于: 2020 年 10 月 31 日

作业一:

1. 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

答:依赖倒置原则是指高层模块不要依赖低层模块。高层模块和低层模块应该通过抽象来互相依赖。除此之外,抽象不要依赖具体实现细节,具体实现细节依赖抽象。

总结起来主要有以下两点:

  • 高层模块不应该依赖底层模块,二者都应该依赖抽象

  • 抽象不应该依赖具体实现,具体实现应该依赖抽象。

"don‘t call us, we‘ll call you)”这就是著名的好莱坞原则。应用程序(底层)不需要调用Tomcat或者Spring(高层)这样的框架,而是框架调用应用程序。

2. 请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。





  • 提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。

 



作业二:

根据当周学习情况,完成一篇学习总结



2.1 从编程历史看面向对象编程的本质与未来

汇编语言

Baic语言

Perl语言:正则表达式

C++语言





领域驱动设计DDD,中台化

 

编程的核心要素





什么是面向对象编程

  • 万物皆对象

  • 面向对象三要素:封装性,继承性,多态

 

框架

 

框架 VS 工具

2.2 设计臭味:糟糕的代码有哪些特点?

设计一个控制电话拨号的软件





软件的上下文

需求变更

面向对象基本原则:

  • 强内聚,松耦合

  • 易扩展

  • 更强壮

  • 可移植

  • 更简单

  • 臭味的软件

  • 僵化性

  • 脆弱性

  • 牢固性

  • 粘滞性

  • 不必要的复杂性

  • 不必要的重复性

  • 晦涩性

 

遵循OOD原则的设计

 

2.3 开闭原则介绍及代码分析

OOD原则一:

  • 软件向扩展是开放的,向修改是关闭的

  • 一个类、模块写完了,不应该再被修改

  • 不修改类,不修改代码,就能实现扩展,就是用抽象

抽象类

接口类

改进button:方法一





改进button:方法二:策略模式





改进button:方法三:适配器模式





改进button:方法四:观察者模式





2.4 依赖倒置原则介绍及代码案例分析

OOD原则二:依赖倒置原则(DIP)

  • 高层模块不能依赖低层模块,而是大家都依赖抽象

  • 抽象不能依赖实现、而实现依赖抽象

 

DIP倒置了什么

  • 模块或包的依赖关系

  • 先开发抽象,接口。接口属于高层模块 ,低层模块实现接口

  • 开发顺序和职责

 

软件的层次化:

  • 高层决定低层

  • 高层被复用









框架的核心

  • 好莱坞规则:

  • don't call me,I'll call you.

  • 倒转的层次依赖关系

 

反应式编程

 

2.5 里氏替换原则

OOD原则三:Liskov替换原则(LSP)

  • 若对每个类型T1的对象o1,都存在一个类型T2的对象o2,使得所有针对T2编写的程序P中,用o1替换o2后,程序P的行为和功能不变,则T1使T2的子类型。

  • 简言之:子类行(subtype)必须能够替换掉他们的基类型(base type)





好的工程师,用更少的代码实现相同的功能

  • 不符合IS-A关系的继承,一定不符合LSP

  • LSP要求:凡事使用基类的地方,一定也适用其子类

  • 从Java语言看:

  • 子类一定拥有基类的整个接口

  • 子类的访问控制不能比基类更严格

  • 从更广泛的意义看,子类的契约不能比基类更严格

 

如何重构代码,以解决LSP问题?

  • 最简单的方式:提供共性到基类

  • 将继承改成组合







继承 vs 组合

  • 继承和组合是OOP两种扩展手段

  • 继承的优点

  • 比较容易,因为基类的大部分功能可以通过继承直接进入子类

  • 继承的确定

  • 继承破坏了封装,因为继承将更多的细节报漏给子类

  • 当基类发生改变时,可能会层层影响其下的子类

  • 继承是静态的,无法在运行时候改变组合

  • 类数量的爆炸

  • 应优先适用组合

 

何时检测LSP?

2.6 单一职责接口隔离

OOD原则四:单一职责原则(SRP)

  • 又称为“内聚性原则”

  • 一个模块的组成元素之间的相关性

  • 将它与引起一个模块改变的作用力相联,就形成了如下描述

  • 一个类,只能有一个引起它变化的原因

 

什么是职责?

  • 一个职责是一个变化的原因

 

违反SRP原则的后果:

  • 脆弱性

  • 不可移植

 

区分类的方法:分清职责

  • 职责:变化的原因

 

OOD原则五:接口分离原则(ISP)

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

 

ISP和SRP的关系

  • 都和“内聚性”有关

  • SRP指出应该如何设计一个类——只能有一种原因才能促使类发生改变

  • ISP指出应该如何设计一个接口——从客户的需要触发,强调让不要让客户看到他们不需要的方法

 

单一职责接口隔离

  • 适配器

  • 多继承,通过接口进程隔离

 

《敏捷软件开发》

2.7 案例:反应式编程框架Flower的设计

程序是如何运行又是如何崩溃的?





同步调用可能产生阻塞

 

异步消息机制

  • 并发,线程

  • 响应时间





为什么Flower可以显著提升系统性能?





Flower核心模块设计







Flower的分布式异步微服务解决方案





貌似视频中说的 Flower 的 GitHub 地址:https://github.com/zhihuili/flower



用户头像

杨斌

关注

还未添加个人签名 2020.03.17 加入

还未添加个人简介

评论

发布
暂无评论
week2 框架设计 作业和学习总结