架构师训练营第二章 总结

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 层就可以了,倒置的抽象是高层的,即由高层来定义,低层来实现。












 
    
评论