Files
ui/docs/architecture/tech-stack.md
T
2025-10-16 15:08:42 +08:00

64 lines
3.3 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.
# Tech Stack
本表是项目的**单一技术事实来源**,所有开发必须使用这些确定的技术和版本。
### Technology Stack Table
| Category | Technology | Version | Purpose | Rationale |
|----------|-----------|---------|---------|-----------|
| **运行时** | .NET | 9.0 | 应用运行时环境 | 最新版本,支持最新 C# 特性,性能优异 |
| **UI 框架** | Avalonia | 11.3.7 | 跨平台桌面 UI 框架 | 现代化、跨平台、活跃社区,不向后兼容旧版本 |
| **MVVM 框架** | ReactiveUI.Avalonia | 11.3.0 | 响应式 MVVM 实现 | 强大的响应式能力,简化复杂交互逻辑,与 Avalonia 深度集成 |
| **状态管理** | ReactiveUI Observable | Built-in | 属性变化监听和数据流 | ReactiveUI 内置,无需额外依赖,统一状态管理方式 |
| **样式系统** | Semi.Avalonia + 自定义 | Latest | UI 样式和主题 | 基于 Semi Design,结合苹果颜色系统的自定义实现 |
| **颜色系统** | 苹果颜色系统(自定义实现) | N/A | 语义化颜色定义 | Primary/Secondary/Success/Warning/Error 等语义化颜色,支持浅色/暗色主题 |
| **布局系统** | Avalonia Layouts + 自定义 | Built-in + Custom | 控件布局 | Avalonia 内置 Panel 系统 + 自定义 TwoColumnLayout |
| **数据绑定** | Avalonia Binding | Built-in | XAML 数据绑定 | Avalonia 原生支持,与 ReactiveUI 无缝集成 |
| **单元测试** | xUnit | 2.6+ | 单元测试框架 | .NET 生态主流选择,简洁易用 |
| **包管理** | NuGet + 统一包版本管理 | Built-in | 依赖包管理 | 使用 Directory.Packages.props 统一管理包版本,避免版本冲突 |
| **版本控制** | Git | 2.40+ | 代码版本管理 | 行业标准 |
| **CI/CD** | 手动构建(MVP) | N/A | 持续集成/部署 | MVP 阶段不强制 CI/CDPost-MVP 可引入 GitHub Actions |
| **代码格式化** | .editorconfig | Built-in | 代码风格统一 | 定义缩进、换行等规则 |
| **文档生成** | XML 文档注释 | Built-in | API 文档 | 所有 public API 必须有 XML 注释 |
| **国际化** | Avalonia IResourceProvider(预留) | Built-in | 多语言支持 | MVP 单一语言,架构预留扩展点 |
| **性能分析** | Visual Studio Profiler / dotnet-trace | Built-in | 性能测量 | 验证 NFR60fps、100ms 主题切换、200ms PropertyGrid 生成) |
---
### 统一包版本管理配置
为了避免多项目间的包版本冲突,项目使用 **Central Package Management**
需要在项目根目录创建 `Directory.Packages.props`
```xml
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Avalonia" Version="11.3.7" />
<PackageVersion Include="ReactiveUI.Avalonia" Version="11.3.0" />
<PackageVersion Include="xUnit" Version="2.6.6" />
<PackageVersion Include="xUnit.runner.visualstudio" Version="2.5.6" />
</ItemGroup>
</Project>
```
各项目的 `.csproj` 文件中引用包时**不指定版本号**:
```xml
<ItemGroup>
<PackageReference Include="Avalonia" />
<PackageReference Include="ReactiveUI.Avalonia" />
</ItemGroup>
```
**优势**
- 所有项目使用相同的包版本
- 升级版本时只需修改一处
- 避免版本冲突导致的编译或运行时错误
---