309
社区成员
发帖
与我相关
我的任务
分享本单元三次作业均围绕图书馆系统展开,我最终的代码结构大致如下:
| 类/模块 | 职责说明 |
|---|---|
Main | 解析输入,处理 OPEN/CLOSE 指令,其余请求交给管理层 |
LibraryManager | 系统总控,负责初始化与开闭馆流程,组织各服务模块 |
RequestHandler | 处理各类请求(借书、还书、预约、取书、阅读、评分等) |
ArrangeService | 负责开馆前/闭馆后的图书整理逻辑 |
MovementService | 统一管理图书移动及轨迹记录 |
BookCopy | 表示单本副本,记录位置、状态、预约与到期信息 |
User | 用户信息,包括信用分、借阅与预约状态等 |
Reservation | 预约对象及其状态(PENDING / READY / COMPLETED / EXPIRED) |
第四单元与前面最大的不同在于:不能先写代码再调整结构,而必须先进行建模。从需求中抽取“名词”和“行为”成为第一步。
| 作业 | 主要内容 | 设计变化 |
|---|---|---|
| HW13 | 基本借还、预约、查询、整理 | 建立核心领域对象 |
| HW14 | 阅读、评分、精品书架、状态扩展 | 引入统一移动模块 |
| HW15 | 信用分、续订、借阅期限 | 扩展业务规则与状态 |
用于确定系统方向:
用于与代码严格对齐:
最终实现中的关键结构:
LibraryManager:系统调度 RequestHandler:业务处理 BookCopy:状态载体 User:用户状态 Reservation:生命周期管理 Main 仅负责输入解析,交由 LibraryManager。
LibraryManager 负责:
RequestHandler 负责所有操作:
保持尽量无状态,调用领域对象完成逻辑。
统一处理图书位置变化:
系统整理逻辑:
BookCopy:副本状态 User:用户状态 Reservation:预约状态 TraceManager:轨迹记录 Repository:对象管理 用表格检查类职责是否过重。
用于检查扩展性与一致性。
| 单元 | 重点 | 思维变化 |
|---|---|---|
| 第一单元 | 表达式 | 对象拆分 |
| 第二单元 | 多线程 | 并发设计 |
| 第三单元 | JML | 规格约束 |
| 第四单元 | UML建模 | 系统设计 |
面向对象的核心不只是拆类,而是:
关键设计体现:
BookCopy 防止状态分散 User 集中用户规则 MovementService 统一轨迹