教学目标


  1. 了解常见的架构设计方法论
  2. 理解面向复杂度架构设计

没有方法论的指导,你做架构设计只不过是在碰运气


  • 面向风险
  • 面向模式
  • 面向复杂度
  • DDD

目录


  1. 方法论的意义
  2. 面向模式
  3. 面向风险
  4. DDD
  5. 面向复杂度

1.方法论的意义

【架构实战营】模块一 3.什么是面向复杂度架构设计?_软件架构

2.面向模式

【架构实战营】模块一 3.什么是面向复杂度架构设计?_复杂度_02

【架构实战营】模块一 3.什么是面向复杂度架构设计?_架构设计_03

3.面向风险

【架构实战营】模块一 3.什么是面向复杂度架构设计?_复杂度_04

【架构实战营】模块一 3.什么是面向复杂度架构设计?_软件架构_05

4.面向复杂度

为什么做架构设计?


  1. 因为架构很重要,所以要做架构设计
  2. 为了提升开发效率,为了促进业务发展
  3. 公司流程要求系统开发过程中必须有架构设计
  4. 为了高性能、高可用、可扩展,所以要做架构设计

追本溯源 – 软件技术发展史

【架构实战营】模块一 3.什么是面向复杂度架构设计?_软件架构_06

追本溯源 – 软件架构诞生背景

【架构实战营】模块一 3.什么是面向复杂度架构设计?_复杂度_07

面向复杂度的架构设计

【架构实战营】模块一 3.什么是面向复杂度架构设计?_架构_08

架构设计环

【架构实战营】模块一 3.什么是面向复杂度架构设计?_架构设计_09

有了方法论,这些问题你有答案么?

【架构实战营】模块一 3.什么是面向复杂度架构设计?_软件架构_10

本节思维导图

【架构实战营】模块一 3.什么是面向复杂度架构设计?_复杂度_11

随堂测验

【判断题】


  1. 架构设计是为了满足高性能、高可用、可扩展的三高要求
  2. 领域驱动设计是系统的架构方法论
  3. DDD只适合可扩展的业务架构设计
  4. 软件架构也要解决数据结构和算法带来的复杂度
    【思考题】
    为什么软件架构最先是在Rational和Microsoft这类大公司兴起的

复盘

1.为什么需要做架构设计?

架构设计的出现是伴随这软件工程出现后,出现的各种软件危机,在设计一些大型的软件项目时,为了更加可控系统的稳定性,安全性,后期系统的可迭代性而出现各种各样的系统级别的复杂度问题而需要进一步进行系统架构的设计。

2.软件系统的复杂度如何理解?

软件系统的复杂度从多个角度进行看,系统的安全性/可拓展性/高可用/高性能等。

3.如何做软件架构设计

其实软件架构设计本身也是围绕需求进行开发,

1.架构设计人员从产品获取的需求后需要不断的去确定需求中不确定性因素,反复确认,澄清不确定性需求。去判断出当前需求中复杂度。

2.当架构设计人员对需求进一步梳理清楚之后,就会按照一定的软件复杂度进行拆分出不同的备选架构方案,而在这个过程中,就是技术选型的阶段,比如针对于存储来说采用MySQL好,还是Redis好,或者说MongDB。对于MQ来说 应该是RabbitMQ 还是Kafka ,对于开发语言的选择,后端采用Java,还是Go等等,或者对于配置中心的选择,以及存储日志的技术选型等。

3.当出现多个备选方案后,架构师需要根据自己以往的经验,从不同的方案中选择出一套更加适合当前业务的架构解决方案。也即:取舍。

4.根据架构方案的4R原则,分层,角色,角色交互,规则,交付到开发人员手中,按部就班的进行需求的迭代开发。也即:实现阶段。而这个阶段架构设计人员一版不参与开发,要开发也是核心的系统功能的开发。

1.​需求->判断->复杂度->拆解->备选架构->取舍->架构方案->实现