💻 软件架构

掌握软件架构的设计模式与最佳实践

23
设计模式
8
架构模式
6
质量属性
4+1
视图模型

🔴 考试重点

MVC模式、观察者模式、单例模式、4+1视图模型是考试的重点内容!

软件架构概述

软件架构定义

软件架构是软件系统的基本结构,包括软件元素、元素间的关系,以及元素和关系的属性。

架构的作用

  • 沟通载体:团队成员的共同语言
  • 早期决策:影响系统质量的关键决策
  • 可传递抽象:可重用的设计模型
  • 约束实现:指导系统实现的框架

架构师职责

技术决策

制定技术标准和架构原则

架构设计

设计系统的整体结构和组件

技术指导

指导开发团队实现架构

风险控制

识别和控制技术风险

设计模式

单例模式

确保一个类只有一个实例,并提供全局访问点。

应用场景

配置管理、日志记录、数据库连接池

工厂模式

创建对象而不指定其具体类。

应用场景

对象创建、产品族管理

建造者模式

分步骤创建复杂对象。

应用场景

复杂对象构建、SQL查询构建

适配器模式

让不兼容的接口能够协同工作。

应用场景

第三方库集成、遗留系统改造

装饰器模式

动态地给对象添加新功能。

应用场景

功能扩展、中间件、AOP

代理模式

为其他对象提供代理以控制访问。

应用场景

远程代理、虚拟代理、保护代理

观察者模式

定义对象间的一对多依赖关系。

应用场景

事件处理、MVC架构、发布订阅

策略模式

定义算法族,使它们可以互换。

应用场景

算法选择、支付方式、排序算法

命令模式

将请求封装为对象。

应用场景

撤销操作、宏命令、队列请求

架构模式详解

分层架构模式

架构特征

  • 层次化组织:系统分为多个层次
  • 单向依赖:上层依赖下层
  • 接口隔离:层间通过接口通信
  • 职责分离:每层有明确职责

变体模式

严格分层:只能调用相邻下层
松散分层:可以调用任意下层

典型应用

OSI七层模型

网络协议栈的经典分层

企业应用架构

表示层、业务层、数据层

操作系统

内核层、系统调用层、应用层

客户端-服务器模式

基本概念

客户端

发起请求,处理用户界面

服务器

处理请求,提供服务

通信协议

HTTP、TCP、RPC等

架构变体

瘦客户端

客户端只负责显示,逻辑在服务器

胖客户端

客户端包含业务逻辑

三层架构

客户端、应用服务器、数据库服务器

管道-过滤器模式

核心组件

过滤器(Filter)
  • • 数据转换组件
  • • 独立的处理单元
  • • 可重用和可组合
管道(Pipe)
  • • 连接过滤器
  • • 传输数据流
  • • 缓冲和同步

应用场景

  • • 编译器设计
  • • 图像处理
  • • 数据处理管道
  • • Unix Shell命令
  • • ETL系统
  • • 信号处理

发布-订阅模式

工作机制

发布者
事件总线
订阅者

优势特点

  • • 松散耦合
  • • 动态订阅
  • • 异步通信
  • • 可扩展性好
  • • 支持广播
  • • 事件驱动

共享数据模式

模式变体

仓库模式

中央数据存储,组件通过仓库通信

黑板模式

知识源协作解决复杂问题

典型应用

  • • 数据库管理系统
  • • 专家系统
  • • 编译器符号表
  • • Web服务器

质量属性详解

性能 (Performance)

关键指标

  • • 响应时间 (Response Time)
  • • 吞吐量 (Throughput)
  • • 资源利用率 (Utilization)
  • • 延迟 (Latency)

优化策略

  • • 缓存机制
  • • 负载均衡
  • • 异步处理
  • • 数据库优化

可用性 (Availability)

度量标准

  • • 99.9% = 8.76小时/年
  • • 99.99% = 52.56分钟/年
  • • 99.999% = 5.26分钟/年

实现策略

  • • 冗余设计
  • • 故障转移
  • • 健康检查
  • • 优雅降级

安全性 (Security)

安全三要素

  • • 机密性 (Confidentiality)
  • • 完整性 (Integrity)
  • • 可用性 (Availability)

安全机制

  • • 身份认证
  • • 访问控制
  • • 数据加密
  • • 审计日志

可修改性 (Modifiability)

变更类型

  • • 功能增加
  • • 功能修改
  • • 功能删除
  • • 质量改进

设计策略

  • • 模块化设计
  • • 接口抽象
  • • 配置外部化
  • • 依赖注入

可测试性 (Testability)

测试层次

  • • 单元测试
  • • 集成测试
  • • 系统测试
  • • 验收测试

设计原则

  • • 控制可观察性
  • • 控制可控制性
  • • 减少复杂性
  • • 提供测试接口

互操作性 (Interoperability)

互操作层次

  • • 语法互操作
  • • 语义互操作
  • • 结构互操作

实现方式

  • • 标准协议
  • • 数据格式标准
  • • API接口
  • • 中间件