42 lines
1.9 KiB
Plaintext
42 lines
1.9 KiB
Plaintext
---
|
||
description: Godot 项目的分层、依赖方向、信号解耦与工程完整性约定
|
||
alwaysApply: true
|
||
---
|
||
|
||
# Godot 分层架构
|
||
|
||
先识别项目已有目录、autoload 和通信方式,再沿用其边界;不要仅为套用规则而创建新框架。
|
||
|
||
## 依赖方向
|
||
|
||
- 领域逻辑负责规则、状态与数据,尽量保持可在 headless 环境运行。
|
||
- 表现层负责场景、UI、输入、动画、音频和特效,不在回调中复制领域规则。
|
||
- 逻辑层不得加载 UI 场景、抓取表现节点或等待表现动画完成。
|
||
- UI 将用户意图转为逻辑层公开命令;状态变化通过返回值、可观察状态或信号反馈。
|
||
- 跨系统优先用明确接口或信号解耦。若项目已有事件总线,复用其契约;没有时不要强制新建全局总线。
|
||
|
||
```gdscript
|
||
# 表现层只转发意图
|
||
func _on_confirm_pressed() -> void:
|
||
entity_service.confirm(entity_id)
|
||
|
||
# 逻辑层发布状态变化,不直接操作 UI
|
||
func confirm(id: StringName) -> void:
|
||
# 更新领域状态
|
||
entity_confirmed.emit(id)
|
||
```
|
||
|
||
## 边界约束
|
||
|
||
- 信号参数和公开方法是跨层契约;修改时同步调用方、测试与相关文档。
|
||
- 避免双向依赖和跨层节点路径。依赖应显式注入或通过稳定接口获取。
|
||
- autoload 只承载确需全局生命周期的服务或状态,不把普通功能默认做成单例。
|
||
- 新系统先明确所有权、生命周期、可测试边界和失败处理,再决定放置位置。
|
||
|
||
## 工程完整性
|
||
|
||
- Godot 版本遵循项目声明;升级引擎或兼容特征前必须说明影响并取得确认。
|
||
- 修改 `project.godot`、导出预设、autoload 或输入映射前,先说明运行与构建影响。
|
||
- Godot 生成的 UID 与对应资源保持一致,不手工伪造;移动或删除资源时检查引用。
|
||
- 外部插件和第三方资源遵守 `dependency-governance`。
|