沿用阶段一的记账本,从命令行程序升级到数据库、REST 接口和 Spring Boot 分层
| 阶段一的小程序 | 真实项目会遇到什么 | 阶段二引入什么 |
|---|---|---|
| 数据只在内存里 | 程序一关,账目全没了 | 文件、数据库、JDBC、持久化 |
| 只能在命令行操作 | 别人无法通过网页或接口使用 | HTTP、REST、Controller |
| 代码只有几个方法 | 功能多了以后,新增、查询、统计、校验混在一起 | Service、Repository、分层 |
| 输入靠人工小心 | 用户会乱输、漏填、重复提交 | 参数校验、异常处理、统一错误返回 |
| 只保存一类数据 | 账目、分类、用户、统计规则开始有关联 | 对象模型、DTO、数据库表设计 |
| 自己看运行结果 | 项目要能被验证、回归和交付 | 单元测试、接口测试、日志 |
| 时间 | 项目目标 | 自然学习到的 Java 主线 | 交付物 |
|---|---|---|---|
| 第 1 周 | 重构阶段一记账本 | 类、对象、封装、方法职责 | 清晰的 Entry、Category、Ledger 类 |
| 第 2 周 | 支持列表、筛选、统计 | 集合、泛型、遍历、排序、过滤 | 可查询的命令行记账本 |
| 第 3 周 | 保存到文件 | IO、异常、资源关闭、数据格式 | 重启后数据仍然存在 |
| 第 4 周 | 迁移到 MySQL | SQL、JDBC、事务、表结构 | 账目表、分类表、基础 DAO |
| 第 5 周 | 接入 Spring Boot | HTTP、REST、Controller、配置 | 新增和查询账目的接口 |
| 第 6 周 | 拆 Service / Repository | 分层、依赖方向、DTO、业务校验 | 结构清楚的后端项目 |
| 第 7 周 | 处理错误和边界 | 异常、参数校验、统一返回、事务边界 | 非法输入、重复提交、空结果都有处理 |
| 第 8 周 | 补测试和复盘 | 单元测试、接口测试、日志、项目表达 | 项目说明、接口清单、测试用例 |
| 知识点 | 在 Web 记账系统里怎么出现 | 吸收标准 |
|---|---|---|
| 面向对象 | Entry、Category、Ledger、EntryService 各有明确职责 | 能解释为什么这些字段和方法放在这里 |
| 集合与泛型 | 查询结果、统计列表、分类集合 | 能根据查询、排序、去重需求选择集合 |
| 异常处理 | 金额非法、分类不存在、数据库失败、接口参数缺失 | 能区分用户输入错误和系统内部错误 |
| IO 与数据库 | 从文件保存升级到 MySQL 持久化 | 能说清数据为什么不该只存在内存里 |
| Spring Boot | 把新增、查询、统计暴露为 REST 接口 | 能讲清 Controller、Service、Repository 的分工 |
| 事务 | 新增账目和更新统计口径要么一起成功,要么一起失败 | 能指出事务边界在哪里 |
| 测试 | 新增、查询、非法输入、统计结果都要能验证 | 能用测试证明核心行为没有被改坏 |
| 验收问题 | 合格回答应该包含 |
|---|---|
| 你的记账系统有哪些核心对象? | Entry、Category、User 或 Ledger,以及它们的字段和关系 |
| 新增一笔账从请求到入库经过哪里? | Controller、DTO、Service 校验、Repository、数据库、返回结果 |
| 金额为负数时怎么处理? | 参数校验、错误码、错误信息,不进入数据库写入 |
| 按分类统计余额怎么实现? | 查询条件、SQL 或集合统计、结果 DTO、接口返回 |
| 如果数据库写入失败怎么办? | 事务、异常、日志、错误返回,必要时保留排查信息 |
| 怎么证明你这个项目是可靠的? | 核心单元测试、接口测试、边界用例、项目说明 |