第二周总结
编程史
德国人莱布尼兹 ——> 法国人雅卡尔 & Ada ——> 图灵 & 冯诺依曼
机器码(二进制) ——> 汇编语言 ——> 面向过程语言(人类思维) ——> 面向对象语言(事物本质)
OOP
编程的过程:在计算机所能理解的”模型“(解空间)和现实现在(问题空间)之间,建立一种联系。
编程本质:人(劳动者)、计算机(劳动工具)、客观业务领域(劳动对象)
万物皆对象:封装性、继承性、多态性
面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程。
面向对象分析是将客观世界,即编程的业务领域进行对象分析。
充血模型 & 贫血模型
DDD 领域驱动设计
设计臭味
高内聚、低耦合
可读性、可维护性、可扩展性、可移植性
开闭原则
OCP:对扩展开放,对更改封闭;即不需要修改软件实体(类、模块、函数等),就可以实现功能的扩展。
实现方式:抽象,套路“接口 ——> 策略模式 ——> 适配器模型 ——> 观察者模式”
依赖倒置原则
DIP:高层模块不能依赖低层模块,而是大家都依赖于抽象;抽象不能依赖实现,而是实现依赖抽象。
注意:接口属于高层模块,DIP 指导开发过程中模块和包的依赖关系倒置以及开发顺序职责的倒置。
思想:高层决定低层;高层被重用。
引申:框架的设计原则,框架调用应用程序,但不依赖应用程序的代码。Don't call me, I'll call you!
案例:spring 的 annotation
里氏替换原则
LSP:子类型必须能够替换掉他们的基类型;即一个正确的继承符合的要求是 Liskov 替换原则。
不管白猫黑猫,抓到老鼠的就是好猫。
单一职责原则
SRP:即”内聚性原则“,一个模块的组成元素之间的功能相关性;一个类,只能有一个引起它的变化原因。即一个类的职责是单一且明确的,不能大而全(idea 一屏)
接口隔离原则
ISP:不应该强迫客户程序依赖它们不需要的方法。
ISP & SRP 关系:
ISP 和 SRP 是相关的,都和”内聚性“有关
SRP 指出应该如何设计一个类(只能有一种原因才能促使类发生改变)
ISP 指出应该如何设计一个接口(从客户的需求出发,强调不要让客户看到他们不需要的方法)
反应式编程
程序运行越来越慢:线程阻塞,阻塞导致了线程不能释放,阻塞导致资源被占用,最终系统资源被耗尽,程序崩溃。
其中 Web 容器解析 http 协议,为每个请求构造一个 request 请求对象以及 response 响应对象。如果有数据库操作,则需要拿数据库连接以及基于连接操作数据库;这其中会有大量的 IO 操作,也就是大量的 IO 阻塞。
Flower 框架:异步的基础是基于 Akka 的 Actor 实现,提升TPS、响应时间、吞吐量。核心点在网络 IO 编程(多路 IO 复用)
总结
框架就是制定一套规范,定义一组接口;由开发者、具体的应用程序去实现这套规范和接口。框架的设计基于依赖倒置原则即 DIP;好的框架必须是高内聚低耦合的,常用的设计原则如 OCP、DIP、LSP、SRP、ISP作为方法论。
版权声明: 本文为 InfoQ 作者【睁眼看世界】的原创文章。
原文链接:【http://xie.infoq.cn/article/6873c9a45f0cdcb7558f35441】。文章转载请联系作者。
评论