写点什么

架构师训练营第二章 总结

用户头像
尔东雨田
关注
发布于: 2020 年 06 月 18 日
架构师训练营第二章 总结

1 编程语言的实质

  • 目的:使用计算机来解决现实世界的问题

  • 过程:在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间,建立一种联系

编程语言是一种“抽象”的机制,问题是对“谁”来抽象


1.1 问题领域


要解决的现实世界问题的,包含系统所要解决的问题相关的实物和概念的空间;

抽象的进化:对基础机器进行抽象 -> 对计算处理逻辑抽象 -> 对问题领域进行抽象 -> 直接表达问题空间内的元素


1.2 编码方法的演进

抽象的进化,带来了编程方法的演进:

汇编语言 -> 高级语言 -> 结构化程序 -> 面向对象设计

2 面向对象编程

2.1 什么是对象

对象具有状态、行为 和 标识;

  • 状态:每个对象可以有自己的数据

  • 行为:每个对象可以产生行为

  • 标识:每个对象都区别于其它的对象

2.2 面向对象编程三要素

  1. 封装:隐藏实现细节,定义接口

  2. 继承:is a 关系 ,has a 关系 ,接口重用

  3. 多态:绑定、向上转形,对象互换

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


用户头像

尔东雨田

关注

预备用枪! 2017.12.12 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第二章 总结