Files
gcs-nf/.agents/skills/gcs-project-layout/SKILL.md
T
hm e7cf44504c feat: Service Registry + Bridge 解耦架构 + 全工程代码清理
## 架构升级:Service Registry + Bridge 模式

- 新增 PluginSDK/IPluginServices.h:10 个纯虚服务接口(IDataProvider/ILinkProvider/...)
- 新增 MavLinkServiceBridge:单 QObject 实现全部服务,隔离 MavLinkNode 依赖
- 升级 PluginManifest:支持 plugin.json 的 provides/consumes 声明式依赖
- 实现 ExtensionHost::autoWire():元对象自省自动连接信号槽
- 集成到 AppController:initModules() 中创建桥接器并注册到 ServiceRegistry
- CockpitPlugin 演示服务发现:initialize() 中通过 PluginContext 查找服务

## 代码清理

- Plugins/opmap:~280 行死代码(waypointsetting 100行注释块/tilematrix 54行/等27个文件)
- Plugins/MavLinkNode:~200 行 GBK 乱码注释翻译为 UTF-8 + 12 行注释死代码
- Plugins/ToolsUI:~222 行死代码(ECU.cpp 82行/INS.cpp 113行/Parse/ToolsUI 等)
- StatusUI/Setting/MissionUI:~65 行注释死代码
- Cockpit/leftladder.cpp:10 处 GBK 乱码翻译为中文
- 清理头文件注释掉的 #include(19 处)、空 if-else 分支、注释变量声明

## 编译验证

- [100%] Built target GCS 零错误
- 运行时 timeout 3s 正常退出,无崩溃
2026-06-01 09:46:36 +08:00

94 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GCS 工程目录规范 Skill
## 触发条件
当用户要求:
- "创建新工程" / "新建项目" / "初始化工程"
- "按标准规范组织代码" / "工程目录规范"
- "重构工程目录" / "整理工程结构"
- "建立 GCS 项目" / "地面站工程模板"
时,按照本规范生成工程骨架。
## 标准工程结构
```
project-root/
├── src/
│ ├── app/ # 主程序 + MainWindow + AppController
│ ├── core/ # 核心业务(protocol/mission/parameter/vehicle
│ ├── comm/ # 通讯层(serial/udp/DataLink
│ ├── ui/ # UI 组件
│ │ ├── panels/ # 功能面板(cockpit/map/mission/setting/status
│ │ ├── widgets/ # 可复用控件(inputter/selector/scope
│ │ └── theme/ # 皮肤/字体
│ ├── plugins/ # 插件系统 + 内置工具插件
│ └── config/ # 配置管理
├── tests/
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ └── fuzz/ # 模糊测试
├── resources/
│ ├── icons/
│ ├── qrc/
│ ├── translations/
│ └── styles/
├── docs/
│ ├── architecture.md
│ ├── build.md
│ └── PROJECT_LAYOUT.md # 本规范的详细文档
├── scripts/
│ └── build_release.bat
├── third_party/
│ └── mavlink/
├── .clang-format
├── .gitignore
├── CMakeLists.txt
└── README.md
```
## 命名约定
| 类型 | 规范 | 示例 |
|------|------|------|
| 目录 | `snake_case` | `remote_control/` |
| 文件 | `PascalCase.ext` | `DataLink.h` |
| 类名 | `PascalCase` | `MavLinkNode` |
| 成员 | `m_camelCase` | `m_portName` |
| 静态常量 | `kPascalCase` | `kDefaultBaud` |
| 信号 | 过去式 | `dataReceived` |
| 槽 | `onCamelCase` | `onDataReceived` |
## 模块依赖规则
- `ui` 依赖 `core``core` 不依赖 `ui`
- `plugins` 依赖 `core` 接口,不直接依赖 `ui`
- `comm``core` 通过接口解耦
- 禁止循环依赖
## 构建要求
- CMake 3.16+,每模块独立 `CMakeLists.txt`
- qmake `.pri` 兼容(渐进迁移)
- C++17 标准
- `third_party/` 仅放头文件或无构建系统的库
## 当前工程迁移映射
从现有 `gcs_nf` 工程迁移到标准结构时,使用以下映射:
| 当前 | 标准 |
|------|------|
| `App/` | `src/app/` + `src/ui/panels/` + `src/ui/widgets/` + `src/plugins/` |
| `MavLinkNode/` | `src/core/protocol/` |
| `dlink/` | `src/comm/` |
| `Cockpit/` | `src/ui/panels/cockpit/` |
| `opmap/` | `src/ui/panels/map/` |
| `Skin/` | `src/ui/theme/` |
| `VehicleManage/` | `src/core/vehicle/` |
| `mavlink/` | `third_party/mavlink/` |
| `图标/` | `resources/icons/` |
| `document/` | `docs/` |
详细规范见 `docs/PROJECT_LAYOUT.md`