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

3.0 KiB
Raw Blame History

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 依赖 corecore 不依赖 ui
  • plugins 依赖 core 接口,不直接依赖 ui
  • commcore 通过接口解耦
  • 禁止循环依赖

构建要求

  • 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