架构师训练营第二章 总结
1 编程语言的实质
目的:使用计算机来解决现实世界的问题
过程:在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间,建立一种联系
编程语言是一种“抽象”的机制,问题是对“谁”来抽象
1.1 问题领域
要解决的现实世界问题的,包含系统所要解决的问题相关的实物和概念的空间;
抽象的进化:对基础机器进行抽象 -> 对计算处理逻辑抽象 -> 对问题领域进行抽象 -> 直接表达问题空间内的元素
1.2 编码方法的演进
抽象的进化,带来了编程方法的演进:
汇编语言 -> 高级语言 -> 结构化程序 -> 面向对象设计
2 面向对象编程
2.1 什么是对象
对象具有状态、行为 和 标识;
状态:每个对象可以有自己的数据
行为:每个对象可以产生行为
标识:每个对象都区别于其它的对象
2.2 面向对象编程三要素
封装:隐藏实现细节,定义接口
继承:is a 关系 ,has a 关系 ,接口重用
多态:绑定、向上转形,对象互换
2.3 面向对象编程与面向对象分析
利用多态特性进行编程,而不是使用面向对象语言编程;
面向对象分析,是分析客观世界,对业务领域进行分析
充血模型和贫血模型
领域驱动设计 DDD
2.4 面向对象设计的目的和原则
目的:强内聚、低耦合 达到易扩展、更强壮、可移植、更简单的目的;
原则:总结的指导原则,即设计模式;
2.4.1 设计模式
用于解决某一问题的通用决绝方案,Gang of Four 提出了 23 中设计模式,三大类创建模式、行为模式、结构模式;
细分领域更多设计模式:并发编程模式、Java EE 模式;
2.4.2 框架
用来实现某一类应用的结构性程序,是对某一类架构方案可复用的设计与实现。
框架与工具的关系,用框架保证架构落地,用工具提高开发效率;
3 面向对象设计的基本原则
软件设计的最终目的,是使软件达到“强内聚,松耦合”,达到易扩展、更强壮、可移植、更简单的目标;
相反不好的软件设计就会出现:
僵硬 - 不易改变
脆弱 - 只想改 A,结果 B 被意外破坏
不可移植 - 不能适应环境的变化
导致误用的陷阱 - 做错误的事比正确的事更容易,引诱程序员破坏原有的设计
晦涩 - 代码难以理解
过度设计
copy-paste 代码
......
3.2 面向对象设计原则
3.2.1 开/闭原则(OCP)
OCP - Open / Closed Principle
对于扩展是开放的(Open for extension)
对于更改是封闭的(Closed for modification)
简而言之,不需要修改软件实体(类、模块、函数等),就应该能实现功能的扩展
当我有需求变更/扩展/增加新功能,都是可以的,开放的,但是不会去修改现有代码
改进方法
策略模式
适配器模式
观察者模式
3.2.2 依赖倒置原则(DIP)
DIP - Dependency Inversion Principle
高层模块不能依赖低层模块,而是大家都依赖于抽象
抽象不能依赖实现,而是实现依赖抽象
DIP 倒置了什么
模块和包的依赖关系
开发顺序和职责
软件的层次化
高层决定低层
高层被重用
controller 依赖 service 接口,service 是低层模块,粗暴方式是把 service 的东西刚在 controller 层就可以了,倒置的抽象是高层的,即由高层来定义,低层来实现。
评论