重构:修复 Shop 与 ItemTooltip 跨模块事件边界问题

- 将 _tooltipLocked 状态从 ItemTooltipController 移到 ShopController 维护
- DisplayItem 只发 Shop 模块 UI 事件(Hover/Lock/Hide)
- ItemTooltipForm 取消按钮发 ItemTooltip 模块事件自关闭
- ShopController 通过 UIRouter 跨模块控制 ItemTooltipForm
- 移除 DisplayItemHideEventArgs 的 Force 字段,分离两种关闭场景
This commit is contained in:
2026-06-17 09:37:44 +08:00
parent 2590f31250
commit c30b256d7a
24 changed files with 340 additions and 213 deletions
+5
View File
@@ -138,6 +138,7 @@ View
- 在 `Controller` 中堆叠大段领域业务规则
- 绕过 `Context` 直接把业务对象塞给 `View`
- 直接修改其他 UI 的内部 `View`
- **直接调用 View 的公开方法进行局部刷新**;应通过更新 `Context` 并设置刷新粒度控制字段,再调用 `RefreshUI` 让 View 自行决定刷新内容
### 3.4 Context 层
@@ -152,12 +153,16 @@ View
- **不允许携带回调委托或行为**,交互行为由 Controller 注册,View 通过 UI 专用事件通知 Controller
- 允许组合子 `Context`
- 不进入 `UseCase`
- **允许提供构造函数**,但只能由对应的 `Controller` 调用,用于封装从 `RawData` 到展示数据的转换逻辑
- **允许提供刷新粒度控制字段**(如 `NeedRefreshXxx` 布尔字段),用于支持局部刷新;View 根据这些字段决定刷新哪些部分,Controller 在更新数据后设置对应字段并调用 `RefreshUI`
说明:
- `Context` 可以包含展示层需要的最终数据
- `Context` 可以是“已格式化”的显示数据
- 但这些数据必须由 `Controller` 负责准备,而不是 `UseCase`
- `Context` 的构造函数可以包含轻量的展示逻辑转换(如格式化文本、选择图标),但不应包含复杂业务规则
- 刷新粒度控制字段的典型用法:Controller 更新 Context 数据后,设置 `NeedRefreshXxx = true`,然后调用 `RefreshUI`;View 在 `RefreshUI` 中检查这些字段,只刷新需要更新的部分,最后将字段重置为 `false`
### 3.5 View 层