# CodeLabDesign
**Repository Path**: lijing_ric/code-lab-design
## Basic Information
- **Project Name**: CodeLabDesign
- **Description**: 软件需求与系统设计实验作业
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-11
- **Last Updated**: 2025-05-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 实验一:软件需求分析与确认
姓名:李靖 学号:ZF2421108
## 1. 实验目标
掌握基于UML的需求建模方法,使用RM2PT工具完成图书馆管理系统(LibraryMS)的需求原型化验证。
## 2. 实验系统
### 2.1 系统选择
选择**图书馆管理系统**,包含3类核心角色:
- 借阅者(Borrower)
- 图书管理员(Librarian)
### 2.2 用户需求
| 角色 | 需求场景 |
|------|---------|
| **借阅者** | 1. 多条件图书检索(书名/ISBN/作者)
2. 在线预约可借阅图书
3. 查看借阅历史记录 |
| **图书管理员** | 1. 处理图书借还手续
2. 管理预约队列
3. 更新图书状态 |
### 2.3 系统需求
| 类型 | 需求描述 | 标准 |
| ---------- | ------------------------------------------------------------ | ----------- |
| 功能需求 | 1. 模糊检索(支持三字段联合查询)
2. 预约通知自动触发机制 | 响应≤1.5s |
| 非功能需求 | 1. 支持500并发检索
2. 数据恢复时间≤60s | 可靠性99.9% |
## 3. 需求建模
### 3.1 结构化自然语言需求
```re
// LibraryMS.re
As a Reader, I want to search for books, so that I can find required resources quickly
{
Basic Flow {
(User) 1. the Reader shall open Library app.
(System) 2. the System shall display main search interface.// (Functional Requirement)
(User) 3. the Reader shall enter keywords.
(System) 4. the System shall return search results within two seconds.// (Functional Requirement)
}
Alternative Flow {
A. At any time, Search returns no results :
1. System suggests related categories.// (Non-Functional Requirement: Usability)
2. System provides option to notify me.// (Functional Requirement)
}
}
```
### 3.2 UML需求模型
#### 3.2.1 用例图

#### 3.2.2 系统顺序图






```
```
#### 3.2.3 概念类图

## 4. 原型验证
使用RM2PT生成的可交互原型运行结果如下所示:

## 5. 模型规模说明
| 模型要素 | 要求 | 达成 |
| :----------: | :--: | :--: |
| 用户需求 | ≥8 | 9 |
| 系统需求 | ≥15 | 16 |
| 用例图参与者 | ≥2 | 2 |
| 用例 | ≥4 | 8 |
| 系统顺序图 | ≥4 | 6 |
| 系统操作总数 | ≥12 | 15 |
| 系统合约 | ≥12 | 15 |
| 概念类 | ≥8 | 8 |
# 实验二 RM2PT自动化架构设计和详细设计
## 任务一 架构设计自动生成(RapidMS)
在生成的ReqModel文件夹中对生成的req文件右键RM2PT for Developer选中Generate Inital
MicroService Model,生成最初的划分模型:
用例图:

类图:

metric视图:

选中Generate MicroService Model,生成最后的微服务模型,MicroserviceModel目录结构如下:
## 任务二 面向对象详细设计自动生成(RM2DM)
Generate Design Model后生成的类图:

生成的序列图:
## 任务三 大模型生成设计模型与微服务拆分
### 一、设计模型(分层架构)
```mermaid
graph TD
A[表现层] --> B[应用层]
B --> C[领域层]
C --> D[数据层]
subgraph 表现层
E[Library App界面]
F[管理控制台UI]
end
subgraph 应用层
G[搜索服务]
H[预约服务]
I[续借服务]
J[库存管理服务]
K[借还处理服务]
L[通知服务]
end
subgraph 领域层
M[图书实体]
N[读者实体]
O[预约队列规则]
P[库存校验规则]
Q[逾期计算规则]
end
subgraph 数据层
R[PostgreSQL数据库]
S[Elasticsearch索引]
T[Redis缓存]
end
```
#### 1. 分层职责说明
| 层级 | 职责描述 |
| ---------- | ------------------------------------------------------------ |
| **表现层** | 处理用户交互,包含移动端 App 界面和管理员控制台,负责输入输出展示 |
| **应用层** | 协调领域层完成业务逻辑,提供 API 接口(如搜索接口、预约接口、库存操作接口) |
| **领域层** | 封装核心业务规则和实体,实现领域逻辑(如预约队列管理、ISBN 唯一性校验) |
| **数据层** | 负责数据持久化,使用 PostgreSQL 存储业务数据,Elasticsearch 处理搜索索引 |
#### 2. 核心组件列表
| 组件名称 | 职责描述 | 依赖关系 |
| ------------ | -------------------------------------------- | ---------------------------- |
| 搜索组件 | 关键词检索、相关类别推荐(基于协同过滤算法) | 数据层 Elasticsearch/Redis |
| 预约队列组件 | 管理预约队列、计算等待位置、触发通知 | 领域层预约规则、库存服务 API |
| 库存管理组件 | 图书录入(ISBN 校验)、库存状态更新 | 领域层库存规则、数据层数据库 |
| 逾期处理组件 | 自动计算罚款、生成提醒任务 | 领域层逾期规则、通知服务 |
#### 3. 非功能需求实现方案
| 需求类型 | 实现方案 |
| ---------------- | ------------------------------------------------------------ |
| 性能(2 秒响应) | 搜索结果缓存(Redis)、Elasticsearch 分片查询、异步推荐算法预处理 |
| 可用性 | 无结果时调用推荐算法组件(基于用户历史行为和图书分类关联) |
| 数据完整性 | ISBN 冲突时通过领域层合并逻辑模块触发人工审核流程 |
| 可靠性 | 通知服务失败时写入重试队列(Redis List),定时任务轮询重试 |
#### 4. 典型流程:搜索功能交互说明
1. 表现层(App)发送搜索请求至应用层搜索服务
2. 搜索服务查询 Elasticsearch 索引(数据层),获取匹配结果
3. 若结果为空,调用推荐算法组件(领域层)生成相关类别建议
4. 结果缓存至 Redis(数据层),返回至表现层展示
### 二、微服务架构设计
```mermaid
graph LR
subgraph 微服务集群
U[search-service]
V[reservation-service]
W[inventory-service]
X[checkout-service]
Y[notification-service]
end
subgraph 基础设施
Z[Kafka消息队列]
AA[API网关]
AB[OAuth2认证中心]
end
U -->|REST| AA
V -->|Kafka| Z
W -->|gRPC| X
Y -->|HTTP| AB
```
#### 1. 微服务列表
| 服务名称 | 职责描述 | 通信方式 | 数据库表 | 依赖服务 |
| -------------------- | ------------------------------------ | -------- | --------------------------- | ------------------------- |
| search-service | 图书搜索、关键词高亮、相关类别推荐 | REST | books_search(ES 索引) | 无 |
| reservation-service | 预约队列管理、等待列表计算、通知触发 | 消息队列 | reservations(PostgreSQL) | inventory-service(gRPC) |
| inventory-service | 图书录入(ISBN 校验)、库存状态管理 | gRPC | books(PostgreSQL) | 无 |
| checkout-service | 借还处理、逾期罚款计算、状态同步 | gRPC | checkouts(PostgreSQL) | inventory-service |
| notification-service | 定时提醒(邮件 / SMS)、失败重试记录 | HTTP | notifications(PostgreSQL) | 无 |
#### 2. 典型流程:预约已借出图书
```plaintext
1. 用户通过App发起预约请求 → API网关路由至reservation-service
2. reservation-service调用inventory-service查询库存状态(图书状态为"Borrowed")
3. 加入预约队列,生成等待位置 → 发送Kafka消息至inventory-service更新预约计数
4. inventory-service更新图书预约数 → reservation-service触发notification-service发送邮件
```
#### 3. 非功能需求技术选型
| 需求类型 | 实现方案 | 技术组件 |
| ---------- | ------------------------------------- | ---------------------- |
| 搜索性能 | 全文索引 + 缓存预热 | Elasticsearch 8.x |
| 异步通知 | 持久化消息队列 + 重试机制 | Kafka + Spring Retry |
| 服务安全 | 管理员接口 OAuth2 认证 | Spring Security OAuth2 |
| 故障恢复 | 服务熔断 + 负载均衡 | Hystrix + Nginx |
| 数据一致性 | 预约 - 库存状态最终一致性(事件溯源) | Kafka Streams |