docs: 生成完整项目文档

创建以下文档:
- INDEX.md - 项目索引和概览
- ARCHITECTURE.md - 系统架构设计文档
- INTERFACES.md - 接口和类型定义文档
- DEVELOPER_GUIDE.md - 开发者指南

文档覆盖内容:
- 项目结构和模块说明
- 技术栈和依赖
- 核心组件设计
- API 接口定义
- 数据模型
- 开发环境配置
- 代码规范
- 测试指南
- 调试技巧
- Git 工作流
Co-authored-by: monkeycode-ai <monkeycode-ai@chaitin.com>
This commit is contained in:
monkeycode-ai
2026-06-03 04:17:14 +00:00
parent ae4de8a116
commit 80b4718568
4 changed files with 1639 additions and 0 deletions
+373
View File
@@ -0,0 +1,373 @@
# CodePlay 系统架构
## 系统概览
CodePlay 采用分层架构设计,将解析、转换、生成和验证流程分离,确保系统的可扩展性和可维护性。
## 架构图
```mermaid
graph TB
subgraph "客户端层"
Web[Web 界面]
CLI[CLI 工具]
API[API 客户端]
end
subgraph "API 层 - CodePlay.Web"
Controllers[API 控制器]
Middleware[中间件]
end
subgraph "核心层 - CodePlay.Core"
ConversionService[转换服务]
subgraph "解析器"
CSharpParser[C# 解析器]
JavaParser[Java 解析器]
CppParser[C++ 解析器]
end
subgraph "转换器"
CSharpJava[C#→Java]
JavaCSharp[Java→C#]
CSharpCpp[C#→C++]
CppCSharp[C++→C#]
JavaCpp[Java→C++]
CppJava[C++→Java]
end
subgraph "生成器"
JavaGen[Java 生成器]
CSharpGen[C# 生成器]
CppGen[C++ 生成器]
end
subgraph "验证器"
CSharpValidator[C# 验证器]
JavaValidator[Java 验证器]
CppValidator[C++ 验证器]
end
end
subgraph "数据层"
Models[数据模型]
Storage[存储服务]
end
Web --> Controllers
CLI --> Controllers
API --> Controllers
Controllers --> ConversionService
ConversionService --> CSharpParser
ConversionService --> JavaParser
ConversionService --> CppParser
ConversionService --> CSharpJava
ConversionService --> JavaCSharp
ConversionService --> JavaGen
ConversionService --> CSharpValidator
ConversionService --> JavaValidator
```
## 技术栈
### 后端框架
| 组件 | 技术选型 | 说明 |
|------|---------|------|
| 主要语言 | C# | .NET 8.0 |
| Web 框架 | ASP.NET Core | Web API + MVC |
| 测试框架 | xUnit | 单元测试和集成测试 |
### 核心依赖
| 库 | 版本 | 用途 |
|---|------|------|
| Microsoft.CodeAnalysis.CSharp (Roslyn) | 4.8.0 | C# 代码解析 |
| TreeSitter | 1.0.0 | 多语言解析支持 |
### 解析器技术
| 语言 | 解析器 | 状态 |
|------|--------|------|
| C# | Roslyn | ✅ 已实现 |
| Java | TreeSitter/Text Processing | 🔄 计划中 |
| C++ | TreeSitter/libclang | 🔄 计划中 |
## 目录结构
```
/workspace/
├── CodePlay.sln # 解决方案文件
├── CodePlay.Core/ # 核心类库
│ ├── Common/ # 公共类型
│ │ └── Enums.cs # 枚举定义
│ ├── Models/ # 数据模型
│ │ ├── ConversionModels.cs # 转换相关模型
│ │ └── ProjectModels.cs # 项目相关模型
│ ├── Interfaces/ # 接口定义
│ │ └── IInterfaces.cs # 核心接口
│ ├── Parsers/ # 解析器
│ │ ├── BaseParser.cs # 解析器基类
│ │ └── CSharpParser.cs # C# 解析器
│ ├── Converters/ # 转换器
│ │ ├── CSharpToJavaConverter.cs
│ │ ├── CSharpToJavaStrategy.cs
│ │ └── JavaCodeGenerator.cs
│ └── Services/ # 服务层
│ └── ConversionService.cs
├── CodePlay.Web/ # Web API 项目
│ ├── Controllers/ # API 控制器
│ │ ├── ConversionController.cs
│ │ └── WeatherForecastController.cs
│ └── Program.cs # 入口文件
├── CodePlay.CLI/ # CLI 工具
│ ├── Commands/ # 命令定义
│ └── Program.cs # 入口文件
└── CodePlay.Tests/ # 测试项目
├── Parsers/ # 解析器测试
│ └── CSharpParserTests.cs
└── Converters/ # 转换器测试
└── CSharpToJavaConverterTests.cs
```
## 核心组件说明
### 1. 解析器(Parsers
负责将源代码解析为抽象语法树(AST)。
**接口**`IParser`
```csharp
public interface IParser
{
Task<SyntaxTree> ParseAsync(string sourceCode, CancellationToken cancellationToken = default);
}
```
**实现**
- `CSharpParser` - 基于 Roslyn 实现 C# 代码解析
- 支持提取注释、文档字符串、类、方法、属性等
### 2. 转换器(Converters
负责将源语言的 AST 转换为目标语言的 AST。
**接口**`IConverter`
```csharp
public interface IConverter
{
Task<ConversionResult> ConvertAsync(
SyntaxTree syntaxTree,
LanguageType targetLanguage,
ConversionOptions? options = null,
CancellationToken cancellationToken = default);
}
```
**实现**
- `CSharpToJavaConverter` - C# → Java 转换
- 使用策略模式:`CSharpToJavaStrategy`
### 3. 代码生成器(Generators
负责从 AST 生成目标语言的源代码。
**接口**`ICodeGenerator`
```csharp
public interface ICodeGenerator
{
string Generate(SyntaxTree syntaxTree);
}
```
**实现**
- `JavaCodeGenerator` - Java 代码生成
- 支持格式化、缩进处理、文档生成
### 4. 转换服务(ConversionService
提供统一的转换入口,协调解析、转换、生成和验证流程。
```csharp
public class ConversionService
{
public async Task<ConversionResult> ConvertAsync(
ConversionRequest request,
CancellationToken cancellationToken = default);
}
```
## 数据流
### 转换流程
```
1. 接收请求 (ConversionRequest)
2. 解析源代码 → SyntaxTree
3. 转换 AST → Converted SyntaxTree
4. 生成代码 → Target Code
5. 编译验证 → ValidationResult
6. 返回结果 (ConversionResult)
```
### 核心数据模型
**ConversionRequest** - 转换请求
```csharp
- SourceCode: string
- SourceLanguage: LanguageType
- TargetLanguage: LanguageType
- ValidationRounds: int (1-3)
- Options: ConversionOptions
```
**ConversionResult** - 转换结果
```csharp
- Success: bool
- TransformedCode: string
- Report: ConversionReport
- Warnings: List<ConversionWarning>
- ValidationSummary: ValidationSummary
```
**SyntaxTree** - 语法树
```csharp
- Language: LanguageType
- Root: SyntaxNode
- Comments: List<SyntaxComment>
- Documentation: List<SyntaxDocumentation>
```
## API 设计
### REST API 端点
**POST /api/conversion** - 执行代码转换
请求示例:
```json
{
"sourceCode": "public class Test { }",
"sourceLanguage": 1,
"targetLanguage": 2,
"validationRounds": 2
}
```
响应示例:
```json
{
"success": true,
"transformedCode": "public class Test { }",
"report": {
"linesConverted": 1,
"classesConverted": 1,
"methodsConverted": 0
}
}
```
**GET /api/conversion/supported** - 获取支持的转换列表
**GET /api/conversion/supported/{source}/{target}** - 检查是否支持指定转换
## 扩展性设计
### 添加新的语言支持
1.`LanguageType` 枚举中添加新语言
2. 实现 `IParser` 接口创建新解析器
3. 实现 `ICodeGenerator` 接口创建新生成器
4. 实现 `IConversionStrategy` 接口创建转换策略
5.`ConversionService` 中注册
### 添加新的转换对
1. 创建新的 `IConverter` 实现
2. 创建对应的 `IConversionStrategy` 实现
3.`ConversionService` 构造函数中注册
## 验证流程
### 编译验证器(Compiler Validator
**接口**`ICompilerValidator`
```csharp
public interface ICompilerValidator
{
Task<ValidationResult> ValidateAsync(
string code,
LanguageType language,
CancellationToken cancellationToken = default);
}
```
### 自动修复引擎(Auto Fix Engine
**接口**`IAutoFixEngine`
```csharp
public interface IAutoFixEngine
{
Task<FixResult> FixAsync(
string code,
List<CompilationError> errors,
int round,
CancellationToken cancellationToken = default);
}
```
**修复轮次策略**
1. 第 1 轮:修复导入/using 语句
2. 第 2 轮:修复类型映射
3. 第 3 轮:修复 API 调用
## 配置管理
### 转换选项(ConversionOptions
```csharp
- KeepComments: bool
- KeepDocStrings: bool
- KeepFormatting: bool
- IndentSize: int
- UseTabs: bool
- EnableAutoFix: bool
```
## 错误处理
### 错误分类
| 类型 | 错误码前缀 | 说明 |
|------|----------|------|
| 解析错误 | ERR_PARSE_* | 源代码语法错误 |
| 转换错误 | ERR_CONVERT_* | 转换过程错误 |
| 验证错误 | ERR_VALIDATE_* | 编译验证失败 |
| 系统错误 | ERR_SYSTEM_* | 内部系统错误 |
## 日志系统
使用结构化日志记录关键操作:
- 转换开始/结束
- 验证结果
- 错误详情
- 性能指标
## 安全考虑
- 输入验证:检查源代码长度、语言类型
- 资源限制:限制单次转换的最大代码量
- 超时控制:设置转换和验证的超时时间
- 错误信息:不暴露内部实现细节