mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-03 14:37:36 +08:00
docs: refresh architecture debt status
This commit is contained in:
@@ -61,8 +61,8 @@
|
||||
|
||||
1. **先做后台任务审计与统一登记**:建立 TaskOwner/生命周期协议,区分请求后非关键通知、可重试 Outbox 副作用和必须在请求内完成的业务写入;为断线、崩溃、重复执行和 shutdown 补测试。
|
||||
2. **再做模块契约 V2 增量收口**:优先识别调用量最高、影响下载/整理/识别的能力族,补真实参数对象、结果验证、超时预算和 provider 行为快照;legacy fallback 只保留给第三方未知方法。
|
||||
3. **随后迁移查询 ABI**:从订阅、历史、消息、用户和站点等高频查询开始,逐步让 Query/Repository 接收显式 Session,并验证 detached 对象、懒加载和事务组合。
|
||||
4. **最后扩展类型和复杂度预算**:每次触碰大型职责域时拆一个可回滚垂直切片,同时扩大 mypy strict 清单和 Pylint 新增问题 ratchet;不要为追求行数指标进行无行为收益的拆分。
|
||||
3. **随后收敛组合根和全局状态**:为新代码禁止新增 Service Locator/Singleton 依赖,逐步让关键服务只通过 typed HostRuntime 获取;旧 Facade 继续保留命中观测和插件 ABI。
|
||||
4. **最后扩展类型和复杂度预算**:每次触碰大型职责域时拆一个可回滚垂直切片,同时扩大 mypy strict 清单和 Pylint 新增问题 ratchet;不要为追求行数指标进行无行为收益的拆分。查询 ABI 已完成正式装饰器清零,后续只做零回退和 ORM 跨层收口。
|
||||
5. **跨仓发布以契约为中心**:保持插件索引、前端远程组件、资源版本、Rust wheel 和主仓依赖的 provenance;将插件测试环境固定为主仓 `uv.lock` 可复现安装,避免本地和 CI 依赖漂移。
|
||||
|
||||
本轮复核结论:**当前架构不需要推倒重来,真正未完成的是运行时可靠性和协议收口。** 下一轮治理完成上述 P1 后,再评估是否值得继续拆分大型文件或扩大严格类型范围。
|
||||
@@ -81,7 +81,7 @@ MoviePilot V3 当前不是“目录混乱、必须推倒重来”的状态。第
|
||||
|
||||
1. **架构基线工具把语义、源码位置和跨仓版本混在一起。**普通行号变化或独立插件仓更新都会触发全量基线漂移,AI 容易用 `--write` 掩盖真正变化。
|
||||
2. **部署拓扑与实际进程职责不一致。**`API_WORKERS` 可配置多进程,但每个 Uvicorn worker 都会独立运行插件、调度器、监控器和工作流;当前 `app.main` 又把 app 实例传给 Uvicorn,与 reload/workers 的官方约束不一致。
|
||||
3. **事务所有权只在少数新用例中收口。**ORM Model 仍大量自带查询和自动提交装饰器,Oper 多为薄转发;调用方无法一眼判断一次业务动作何时提交、回滚和触发提交后副作用。
|
||||
3. **事务所有权已完成装饰器层收口,但 ORM 对象跨层流转仍需治理。**正式 Model 查询/写装饰器均已清零,宿主 Oper 查询统一接收显式 Session;调用方仍需继续明确 ORM 对象生命周期、懒加载和业务提交后副作用边界。
|
||||
4. **组合根之后仍存在大量全局服务定位。**宿主有 180 个文件直接读取 `settings`,21 个文件出现 45 次 `SystemConfigOper()` 构造;API 数据端口仍是全局字符串注册表。
|
||||
5. **模块与事件契约主要是“快照化的动态协议”。**211 个模块方法名中有 96 个落在 legacy 默认契约;53 个事件只有 20 个专用 `EventData` model,payload、可见范围和可靠性等级没有统一登记。
|
||||
6. **后台副作用缺少统一可靠性定义。**事件队列、APScheduler、FastAPI BackgroundTasks 和线程池任务的丢失、重试、幂等、关停语义各不相同;数据库提交与事件/上报之间仍有进程崩溃窗口。
|
||||
@@ -131,7 +131,7 @@ MoviePilot V3 当前不是“目录混乱、必须推倒重来”的状态。第
|
||||
| 专用 EventData model | 53 | Event Contract Registry 已为全部事件登记 typed payload/fallback 原因 |
|
||||
| 直接读取 `settings` 的文件 | 105 | 仍按模块族迁移,动态协议和安全端口暂保留 |
|
||||
| `SystemConfigOper()` | 1 个 | 仅组合根创建 `SystemConfigService` 时保留 |
|
||||
| Model 上的 DB 查询装饰器 | 117 | `db_update`/`async_db_update` 为 0;查询 ABI 继续按 canonical 用例迁移 |
|
||||
| Model 上的正式 DB 查询装饰器 | 0 | 查询/写装饰器均保持为 0;旧插件只读 ABI 由 `legacy_*` 外壳承接 |
|
||||
| 路由端点 | 335 | 11 个已装饰端点超过 80 行,最大 400 行 |
|
||||
| Chain 方法超过 150 行 | 18 | 最大 `TransferChain.do_transfer()` 885 行 |
|
||||
| Application 方法超过 150 行 | 8 | 最大 296 行 |
|
||||
|
||||
Reference in New Issue
Block a user