本讲目标
完成本节课后,你应该能够:
- 理解软件架构的定义
- 区分架构与设计的区别
- 掌握常见架构模式
- 分析系统架构的优缺点
什么是软件架构
软件架构(Software Architecture)描述系统的:
- 核心组件
- 组件之间的关系
- 数据流动方式
- 技术约束
Architecture is about the important stuff. Whatever that is.
— Ralph Johnson
为什么架构重要
随着系统规模增长:
代码增加
↓
模块增加
↓
依赖增加
↓
复杂度增加
如果缺少合理架构:
- 开发效率下降
- 测试困难
- 扩展困难
- 维护成本增加
分层架构(Layered Architecture)
最经典的软件架构模式。
graph TD
A[Presentation Layer] --> B[Business Layer]
B --> C[Data Access Layer]
C --> D[Database]
优点
- 易于理解
- 易于维护
- 职责清晰
缺点
- 性能损耗
- 灵活性不足
MVC 模式
MVC:
Model
View
Controller
结构如下:
graph LR
User --> View
View --> Controller
Controller --> Model
Model --> View
职责划分
| 组件 | 职责 |
|---|---|
| Model | 数据与业务逻辑 |
| View | 用户界面 |
| Controller | 请求处理 |
微服务架构
近年来广泛应用于互联网系统。
示例:
graph TD
Gateway --> UserService
Gateway --> OrderService
Gateway --> PaymentService
Gateway --> ProductService
特点:
- 服务独立部署
- 技术栈灵活
- 易于扩展
架构质量属性
设计架构时需要考虑:
可扩展性
系统是否能够支持增长?
可维护性
修改成本是否可控?
可用性
系统能否持续提供服务?
性能
响应速度是否满足需求?
课堂案例
假设我们需要设计一个在线书店系统。
主要需求:
- 用户注册
- 商品浏览
- 购物车
- 在线支付
请思考:
问题1
应该采用:
- 单体架构?
- 微服务架构?
为什么?
问题2
支付模块是否应该独立部署?
请给出理由。
课堂练习
练习一
分析以下系统:
校园选课系统
回答:
- 核心模块有哪些?
- 数据流如何组织?
- 哪些模块耦合度最高?
练习二
比较:
| 架构 | 优点 | 缺点 |
|---|---|---|
| 单体架构 | 简单 | 扩展困难 |
| 微服务 | 灵活 | 运维复杂 |
| 事件驱动 | 解耦 | 调试困难 |
本讲总结
今天学习了:
- 软件架构概念
- 分层架构
- MVC 模式
- 微服务架构
- 架构质量属性
请记住:
软件架构的目标不是追求最新技术,而是在复杂性、成本和需求之间取得平衡。
推荐阅读
必读
- Clean Architecture
- Fundamentals of Software Architecture
选读
- Designing Data-Intensive Applications
- Building Microservices
下节课预告
Lecture 06
主题:
领域驱动设计(DDD)
内容包括:
- Bounded Context
- Aggregate
- Domain Event
- Ubiquitous Language
课程:软件工程导论
讲师:王教授
更新时间:2026-05-30