数据库服务开发:分层、Session 与事务回滚|学员任务书

课前预习 · 课堂课件 · 课后复习

项目任务与本人起点

任务:整笔订单失败回滚与连接释放。起点是本人 D01 导入器、商品资料与 MySQL 查询;保留本人代码,领取当天 student/W02-D02 增量后只合并新增文件,不用日包覆盖昨天实现。

当天新增或补写 commerce_ops/session_scope.py,保留 transaction_lab 与 layer_ports;Router 本日只识别,D03 再实现 工程任务。D01 的 commerce_ops 是加入本人仓库的运营工具;之后每天继续同一个包。D05 不重复领取前四日答案,测试自己的实现。

支架与学生负责的部分

教师提供样本、接口签名、当日检查器以及既有 SQL/HTTP/容器支架。学生负责业务函数、边界处理和独立变化;完整教师实现不下发。命令在包含 commerce_ops 的本人项目根执行,现有实库和 HTTP 命令按各自 README 的工作目录运行。

python check_d02_python.py

首次有效红灯应来自 STUDENT_TODO。D04/D05 若缺前一日模块,应先合并本人已完成代码;ModuleNotFoundError、缺 pytest 或缺服务都不算教学红灯。测试依赖沿用当天工程 requirements 清单和 Python 3.12 环境。

输入、输出与不变规则

金额内部 Decimal、对外两位小数字符串。商品编号/客户编号沿用样本,不让客户端提供最终金额。新增产物:可解释的资源边界与数据库订单事务。

文件工具操作本地课程样本,不自动写商城数据库;多源查询连接器的本地替身不等于真实物流。实库只用专用实验库;不要把 mock/Fake 的通过写成 MySQL、Linux、Docker 或远端 CI 已通过。

分段任务

  1. 回归本人起点,标出输入、计算/状态变化和输出;保留修改前版本。
  2. 先运行课件的最小例,解释 __enter__/__exit__、异常传播、try/finally、contextmanager 单次 yield、closing;复用 Session/UoW/flush/commit/rollback 在当天任务里解决什么问题。
  3. 补当日 TODO;检查器转绿后,把功能保留在本人累计项目中。逐段修改,不让 AI 一次生成整套工程。
  4. 运行这些情况并比较预期与实际:正常 commit→close;业务失败 rollback→close;提交失败仍关闭;真实第二项失败后核对三类表和库存。
  5. 查看 AI 修改差异,至少指出一处接受或拒绝的理由。重点防止:exit 返回 True 吞业务异常;循环内提交;清理失败不关闭;Fake 事件顺序冒充实库回滚。
  6. 同伴更换一组未见输入或一个故障点,作者先预测、再独立运行和解释;同伴按 README 复现,不靠作者代敲。

提交与验收

  • 当日本人代码、运行命令、固定提交及与昨天的修改差异。
  • 正常、失败、边界和修复后回归的输入与原始结果;具体运行项见上方第 4 步。
  • 口述一个知识点为什么需要、在商城哪里用,以及一处不能由当前测试证明的结论。
  • 原 SQL/事务/API/容器/CI 任务继续按真实环境验收;未运行项填写待验证。

只贴绿色截图、复制完成版、吞失败后伪造成功,不能通过。

课堂范围与后续

映射类和数据库连接工厂沿用提供支架,不从零搭 ORM;contextmanager 只实现一个边界,不展开装饰器框架。实库不可用时保留 pending,不能用替身签收。

D03 直接复用数据库服务,通过 HTTP 接入并补异步多源查询。尚未完成的本日核心必须补验,不能默认用课后新增学时替代课堂容量。