basil/vampire-like 开发日志(2026-06-17)
今天一共提交4个commit,总代码变动规模为 +465 / -92,主要围绕UI模块边界治理、项目目录规范统一、业务代码可读性优化三个方向做了重构,同时补全了UI架构设计文档的核心约定,把之前踩过的坑都固化成了规范。
核心改动说明
1. 拆分 Shop 与 ItemTooltip 的跨模块事件边界
之前这两个模块的事件设计一直有耦合的问题:最开始图省事把ItemTooltip的锁定逻辑放在了ItemTooltip模块内部,结果每次都要额外处理「怎么让ItemTooltip感知到Shop内的陈列道具被点击」的逻辑,两个本来应该独立的UI模块,事件杂糅在一起,边界特别模糊。 这次调整的核心思路就是把权限收回到模块内部:把tooltip的锁定、关闭判断逻辑从ItemTooltip侧挪回Shop侧,由Shop自己决定什么时候要触发tooltip的隐藏,自然就把两个模块的专用事件拆开了:
- 清理了ItemTooltipHideEventArgs里冗余的
Force字段,删掉了已经废弃的ItemTooltipLock、Show事件对应的meta文件 - 新增Shop模块专属的
DisplayItemHideEventArgs事件类,彻底划清两个模块的事件边界,后续各用各的私有事件,不会再出现跨模块乱串的情况 - 把这次踩坑总结的3条UI开发核心约定补到了《UI-5层架构设计规范.md》里,后续所有UI开发都要遵循:
- 禁止直接调用View的公开方法做局部刷新,应该更新Context内的刷新粒度控制字段,再调用统一的
RefreshUI由View自行决定刷新内容 - View允许提供构造函数,但只能由对应的Controller调用,专门用来封装从RawData到展示数据的转换逻辑
- Context内允许定义
NeedRefreshXxx这类布尔型的刷新粒度控制字段,支持局部刷新,不要每次都整页重绘
- 禁止直接调用View的公开方法做局部刷新,应该更新Context内的刷新粒度控制字段,再调用统一的
2. 统一全项目UI目录与命名规范
之前UI层的目录和类命名一直没有统一标准,有的带Form后缀有的不带,通用事件和业务专属事件混放,找文件的效率特别低,这次做了全量的标准化调整:
- 事件类按业务模块收敛:原来定义了一个通用的
RefreshEventArgs,实际上只有LevelUp模块在用,直接重命名为LevelUpRefreshEventArgs,同步调整了LevelUp模块内所有事件订阅、触发的逻辑,避免后续出现多个模块抢同一个通用事件的问题 - 业务视图文件按模块归位:把之前放错层级的
LevelUpRewardItem等视图文件,迁回了对应业务模块的专属目录 - UIBase层目录统一简化:把
AboutForm、DialogForm这类带冗余Form后缀的目录名做了简化,同时把原来的DisplayItemInfo目录统一重命名为ItemTooltip,和业务层命名保持一致
注:这次的类重命名是直接在IDE内做的符号级重命名,目录迁移是在Unity编辑器内操作的,理论上所有引用都会自动同步,不会出现遗漏。
3. 拆分 ShopController 的 Context 构建逻辑
之前ShopController的代码越写越长,光BuildContext相关的逻辑就占了小两百行,每次改相关逻辑都要翻半天,特别影响开发效率。
这次用partial类把BuildContext的逻辑单独抽到了ShopController.BuildContext.cs文件里,完全没有改动原有业务逻辑,只是做了物理拆分,看代码的时候可以直接找对应的partial文件,能降低不少认知负担。顺便补了ShopContext的默认构造函数,省得每次初始化都要手动给初始字段赋值。
这个拆分模式不会强制推广到所有Controller,后续哪个业务Controller的BuildContext逻辑写长了,再按同样的方式拆分就行。
另外这次还大幅更新了《UI-5层架构设计规范.md》,补充了UseCase与编排层(Procedure)的依赖倒置通信规则,以及完整的架构分层说明,后续新模块开发都要遵循这套分层规范。
后续跟进事项
- 跑通全链路功能验证,排查本次目录调整、事件重命名有没有遗漏的引用,避免出现运行时异常
- 验证Shop模块Context构建逻辑拆分后的初始化流程,确认和原有逻辑完全兼容
- 推进其余业务模块按本次确定的目录、事件规范完成对齐重构,统一全项目的开发标准
- 跟进UI-5层架构规范的落地执行,避免后续再出现跨模块事件耦合、目录乱放的问题
注:本文由模型
doubao-pro生成(草稿与终稿同模型)。