# 项目文件组织规范

**文档版本**: 1.0  
**创建日期**: 2025-08-17  
**适用范围**: NavisworksTransport项目开发代理  

## 1. 概述

本文档规定了NavisworksTransport项目中各类文件的标准放置位置、命名约定和组织原则，确保所有开发代理遵循统一的文件组织标准，提高项目的可维护性和协作效率。

## 2. 标准目录结构

```
NavisworksTransport/
├── src/                          # 源代码目录
│   ├── Core/                     # 核心功能模块
│   ├── UI/                       # 用户界面模块
│   ├── PathPlanning/             # 路径规划模块
│   ├── Commands/                 # 命令模式实现
│   ├── Utils/                    # 工具类库
│   ├── Resources/                # 资源文件
│   └── Legacy/                   # 遗留代码（仅作参考）
├── tests/                        # 测试文件目录
│   ├── Unit/                     # 单元测试
│   ├── Integration/              # 集成测试
│   └── Performance/              # 性能测试
├── doc/                          # 文档目录
│   ├── working/                  # 工作文档和开发过程记录
│   ├── guide/                    # 使用指南和技术文档
│   ├── design/                   # 设计文档
│   ├── requirement/              # 需求文档
│   └── migration/                # 迁移文档
├── Properties/                   # 项目属性文件
└── 项目根目录文件               # 配置文件、解决方案文件等
```

## 3. 文件放置规则

### 3.1 源代码文件 (`src/`)

**放置原则**: 按功能模块组织，每个文件都应有明确的职责

**规则详述**:

- **核心功能**: `src/Core/` - 插件主体、管理器类、数据模型
- **用户界面**: `src/UI/` - WPF控件、WinForms对话框、视图模型
- **路径规划**: `src/PathPlanning/` - 算法实现、数据结构
- **命令模式**: `src/Commands/` - 命令接口、执行器、具体命令
- **工具类**: `src/Utils/` - 通用工具、转换器、辅助类
- **资源文件**: `src/Resources/` - 图标、字符串资源、配置文件

**禁止内容**:

- ❌ 测试文件（应放在 `tests/` 目录）
- ❌ 使用示例代码（应放在 `doc/working/` 目录）
- ❌ README文件（应放在 `doc/working/` 目录）
- ❌ 临时调试代码

### 3.2 测试文件 (`tests/`)

**放置原则**: 所有测试相关文件统一管理

**文件类型**:

- **单元测试**: `tests/Unit/` - 单个类或方法的测试
- **集成测试**: `tests/Integration/` - 模块间协作测试
- **性能测试**: `tests/Performance/` - 性能基准测试
- **UI测试**: `tests/UI/` - 界面功能测试

**命名约定**:

- 单元测试: `{ClassName}Tests.cs`
- 集成测试: `{ModuleName}IntegrationTest.cs`
- 性能测试: `{FeatureName}PerformanceTest.cs`

**示例**:

```
tests/
├── Unit/
│   ├── PathPlanningManagerTests.cs
│   ├── ViewModelBaseTests.cs
│   └── CoordinateConverterTests.cs
├── Integration/
│   ├── CommandFrameworkIntegrationTest.cs
│   ├── ClashDetectiveIntegrationTest.cs
│   └── UIStateManagerIntegrationTest.cs
└── Performance/
    └── PathfindingPerformanceTest.cs
```

### 3.3 工作文档 (`doc/working/`)

**放置原则**: 开发过程中的所有文档和说明

**内容类型**:

- **开发任务**: 任务清单、进度报告、完成总结
- **技术方案**: 实现方案、架构设计、问题解决
- **使用示例**: 代码示例、使用说明、最佳实践
- **调试记录**: 问题排查、错误修复、性能优化

**命名约定**:

- 任务文档: `{功能名称}_{任务类型}_{日期}.md`
- 技术方案: `{方案名称}_技术设计方案_{日期}.md`
- 问题记录: `{问题描述}_修复报告_{日期}.md`

### 3.4 技术文档 (`doc/guide/`)

**放置原则**: 稳定的技术指南和参考文档

**内容类型**:

- **开发指南**: 开发环境搭建、编码规范
- **API文档**: 接口说明、使用方法
- **故障排除**: 常见问题解决方案
- **最佳实践**: 代码模式、设计原则

## 4. 文件命名约定

### 4.1 通用命名规则

- **语言**: 中文文档使用中文命名，代码文件使用英文命名
- **格式**: 无空格，使用下划线分隔，避免特殊字符
- **日期**: 使用 YYYYMMDD 格式
- **版本**: 使用语义化版本号（如适用）

### 4.2 具体命名规范

**源代码文件**:

```
类文件: {ClassName}.cs
接口文件: I{InterfaceName}.cs
管理器类: {ModuleName}Manager.cs
工具类: {FeatureName}Helper.cs 或 {FeatureName}Utility.cs
```

**测试文件**:

```
单元测试: {ClassName}Tests.cs
集成测试: {ModuleName}IntegrationTest.cs
示例代码: {FeatureName}Example.cs
```

**文档文件**:

```
工作文档: {主题}_{类型}_{日期}.md
技术指南: {主题}_guide.md
设计文档: {主题}_design.md
```

## 5. 开发代理遵循指南

### 5.1 文件创建检查清单

在创建新文件时，请按以下清单检查：

- [ ] **确定文件类型**: 源代码、测试、文档、配置
- [ ] **选择正确目录**: 根据文件功能选择标准目录
- [ ] **遵循命名约定**: 使用标准命名格式
- [ ] **检查文件职责**: 确保文件功能单一、职责明确
- [ ] **避免重复放置**: 检查是否已存在类似文件

### 5.2 代码文件组织原则

**单一职责原则**:

- 每个文件应专注于单一功能
- 避免在一个文件中混合多种类型的代码

**模块化原则**:

- 相关功能的文件应放在同一目录下
- 跨模块依赖应最小化

**可维护性原则**:

- 使用清晰的文件和目录命名
- 添加适当的注释和文档

### 5.3 禁止的文件放置模式

**严格禁止**:

- ❌ 在 `src/` 目录下放置测试文件
- ❌ 在源代码目录下放置README或使用说明
- ❌ 在项目根目录下创建临时文件
- ❌ 在 `Legacy/` 目录下添加新代码

**强烈不建议**:

- 🚫 在不相关的模块目录下放置文件
- 🚫 使用含糊不清的文件名
- 🚫 创建单一功能的深层目录结构

## 6. 文件迁移指导

### 6.1 当前需要迁移的文件

根据项目现状，以下文件需要重新组织：

**测试文件迁移**:

```bash
# 需要从源码目录迁移到tests目录的文件
src/Commands/CommandFrameworkTest.cs           → tests/Integration/CommandFrameworkIntegrationTest.cs
src/Commands/CommandPatternIntegrationTest.cs → tests/Integration/CommandPatternIntegrationTest.cs
src/Core/ClashDetectiveIntegrationTest.cs     → tests/Integration/ClashDetectiveIntegrationTest.cs
src/UI/WPF/ViewModels/ViewModelBaseTest.cs    → tests/Unit/ViewModelBaseTests.cs
```

**示例文件迁移**:

```bash
# 需要从源码目录迁移到文档目录的文件
src/Commands/README.md                         → doc/working/Commands模块使用说明_20250817.md
src/Core/UIStateManagerExample.cs             → doc/working/UIStateManager使用示例_20250817.md
src/UI/WPF/Collections/ThreadSafeObservableCollectionUsageExample.cs → doc/working/ThreadSafeObservableCollection使用示例_20250817.md
```

### 6.2 迁移步骤

**步骤1: 备份当前文件**

```bash
# 确保git状态清洁
git status
git add .
git commit -m "迁移前备份"
```

**步骤2: 创建目标目录结构**

```bash
# 创建测试目录结构
mkdir tests/Unit
mkdir tests/Integration
mkdir tests/Performance
mkdir tests/UI
```

**步骤3: 移动文件**

```bash
# 使用git mv保持版本历史
git mv src/Commands/CommandFrameworkTest.cs tests/Integration/CommandFrameworkIntegrationTest.cs
# 重复其他文件...
```

**步骤4: 更新引用和导入**

- 更新命名空间
- 修复相对路径引用
- 更新项目文件引用

**步骤5: 验证迁移结果**

- 编译项目确保无错误
- 运行测试确保功能正常
- 提交迁移变更

## 7. 质量检查清单

### 7.1 日常检查项目

**文件组织检查**:

- [ ] 所有测试文件都在 `tests/` 目录下
- [ ] 源代码文件按模块正确分类
- [ ] 文档文件在相应的 `doc/` 子目录下
- [ ] 没有在源代码目录下的README或示例文件

**命名规范检查**:

- [ ] 文件名符合命名约定
- [ ] 目录结构清晰合理
- [ ] 避免使用临时或模糊的命名

**代码质量检查**:

- [ ] 每个文件职责单一
- [ ] 命名空间与目录结构一致
- [ ] 适当的注释和文档

### 7.2 违规文件检测脚本

可以使用以下PowerShell脚本检测违规文件：

```powershell
# 检测源码目录下的测试文件
Get-ChildItem -Path "src" -Recurse -Name "*Test*.cs" | ForEach-Object {
    Write-Warning "发现测试文件在源码目录: $_"
}

# 检测源码目录下的README文件
Get-ChildItem -Path "src" -Recurse -Name "README.*" | ForEach-Object {
    Write-Warning "发现README文件在源码目录: $_"
}

# 检测源码目录下的示例文件
Get-ChildItem -Path "src" -Recurse -Name "*Example*.cs" | ForEach-Object {
    Write-Warning "发现示例文件在源码目录: $_"
}
```

### 7.3 项目结构验证

**必要目录检查**:

- [ ] `src/` 目录存在且包含核心模块
- [ ] `tests/` 目录存在且有子分类
- [ ] `doc/working/` 目录存在且有当前文档
- [ ] 项目根目录整洁，无临时文件

**目录内容检查**:

- [ ] `src/` 下只有源代码文件
- [ ] `tests/` 下只有测试相关文件
- [ ] `doc/` 下按类型正确分类

## 8. 总结

遵循本规范可以确保：

1. **项目结构清晰**: 便于新成员快速理解项目组织
2. **协作效率提升**: 减少因文件位置混乱导致的沟通成本
3. **维护成本降低**: 标准化的文件组织便于长期维护
4. **代码质量提升**: 强制的职责分离有助于代码质量

**重要提醒**: 所有开发代理在创建新文件或修改现有结构时，都必须严格遵循本规范。如有疑问，请参考本文档或向项目负责人咨询。

---

**文档维护**: 本文档将根据项目发展需要进行更新，所有变更将在版本历史中记录。
