# 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 用例图 ![image-20250513210255594](readme.assets/image-20250513210255594.png) #### 3.2.2 系统顺序图 ![image-20250513210328796](readme.assets/image-20250513210328796.png) ![image-20250513210344178](readme.assets/image-20250513210344178.png) ![image-20250513210406413](readme.assets/image-20250513210406413.png) ![image-20250513210435882](readme.assets/image-20250513210435882.png) ![image-20250513210452336](readme.assets/image-20250513210452336.png) ![image-20250513210508018](readme.assets/image-20250513210508018.png) ``` ``` #### 3.2.3 概念类图 ![image-20250513215759185](readme.assets/image-20250513215759185.png) ## 4. 原型验证 使用RM2PT生成的可交互原型运行结果如下所示: ![image-20250513221415268](readme.assets/image-20250513221415268.png) ## 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,生成最初的划分模型: 用例图: ![image-20250526192125452](readme.assets/image-20250526192125452.png) 类图: ![librarymanagement](readme.assets/librarymanagement-1748258591018-2.jpg) metric视图: ![image-20250526192650387](readme.assets/image-20250526192650387.png) 选中Generate MicroService Model,生成最后的微服务模型,MicroserviceModel目录结构如下:image-20250526192925544 ## 任务二 面向对象详细设计自动生成(RM2DM) Generate Design Model后生成的类图: ![librarymanagement Class Diagram](readme.assets/librarymanagement Class Diagram.jpg) 生成的序列图: image-20250526193319168 ## 任务三 大模型生成设计模型与微服务拆分 ### 一、设计模型(分层架构) ```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 |