Files
ui/docs/prd/technical-assumptions.md
2025-10-15 23:40:13 +08:00

118 lines
6.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.
# Technical Assumptions
### Repository Structure: Monorepo
**决策:** 采用 Monorepo 结构,所有代码在单一 Git 仓库中管理
**目录结构:**
```
D:\32_avalonia.ui/
├── src/
│ ├── Penguin.AvaloniaUI/ # 核心控件库项目
│ ├── Penguin.AvaloniaUI.SourceGenerators/ # Source Generator可选Post-MVP
│ ├── Example/ # 示例应用项目
│ └── Penguin.AvaloniaUI.Tests/ # 单元测试项目
├── docs/ # 文档
└── .bmad-core/ # BMAD 框架配置
```
**Rationale:**
- Monorepo 简化了控件库和示例应用的协同开发,便于快速迭代和测试
- 依赖管理更简单,所有项目共享同一个 NuGet 依赖版本
- MVP 阶段项目数量少3-4 个Monorepo 不会带来复杂度负担
- 未来如果需要拆分(如 Source Generator 独立发布),迁移成本也可控
### Service Architecture
**架构类型:** 单体库Monolithic Library
**说明:**
- Penguin.AvaloniaUI 是一个单一的 .NET 类库项目,所有控件作为命名空间组织在同一个程序集中
- 不采用微服务或独立的控件包(如每个控件一个 NuGet 包),避免过度设计和版本管理复杂度
- 控件之间可以有依赖关系(如 UserGuide 依赖 Overlay但应尽量保持松耦合
- 使用命名空间隔离不同功能模块:
- `Penguin.AvaloniaUI.Controls` - 业务场景控件
- `Penguin.AvaloniaUI.Layouts` - 布局控件
- `Penguin.AvaloniaUI.Themes` - 主题和样式
- `Penguin.AvaloniaUI.Utils` - 工具类
**架构约束:**
- 所有控件必须继承自 Avalonia 的标准控件基类(`TemplatedControl``UserControl` 等)
- 样式和模板通过 Avalonia 的资源字典ResourceDictionary组织
- 主题切换通过 `Application.Current.Resources` 动态加载不同的资源字典实现
### Testing Requirements
**测试策略:** 单元测试 + 手动集成测试
**单元测试范围:**
- **核心业务逻辑**PropertyGrid 的属性解析、UserGuide 的步骤流转逻辑
- **工具类**ThemeManager、LocalizationManager如果实现
- **数据绑定和验证**PropertyGrid 的数据模型和 ReactiveUI 集成
**不包括的测试:**
- UI 渲染测试Avalonia 的渲染层不易测试,依赖手动验证)
- 跨平台兼容性测试MVP 阶段只在 Windows 上测试)
- 性能基准测试(除非发现明显的性能问题)
**手动测试:**
- 使用 Example 项目作为主要测试载体
- 每个控件应在 Example 中有独立的演示页面
- 测试场景包括:主题切换、属性编辑、引导流程、异常处理
**测试框架:**
- xUnit 作为单元测试框架
- FluentAssertions 用于断言(可选)
- 不引入 UI 自动化测试框架(如 Appium
**Rationale:**
- MVP 阶段时间紧张优先保证核心逻辑的正确性UI 渲染依赖手动测试
- 上位机和 AI 桌面应用通常不需要极高的测试覆盖率(不像 Web 应用需要应对大规模用户)
- Example 项目本身就是"活文档",可以作为回归测试的基准
### Additional Technical Assumptions and Requests
**1. 核心技术栈:**
- **.NET 版本:** .NET 8.0 或更高LTS 版本)
- **Avalonia 版本:** 11.x最新稳定版锁定到次要版本如 11.0.x
- **ReactiveUI 版本:** 最新稳定版19.x 或更高)
- **Semi.Avalonia 版本:** 最新稳定版(需要在项目初期快速评估其可用性)
**2. AOT 支持策略(软约束):**
- **架构设计应考虑未来 AOT 支持**,但 MVP 阶段允许使用反射
- PropertyGrid 如果使用反射实现,应设计清晰的抽象层,便于后续迁移到 Source Generator
- 避免使用 `Reflection.Emit` 和动态类型(`dynamic`
- 尽量使用编译时类型安全的 API
**3. 国际化架构预留:**
- 控件内置文本(如 PropertyGrid 的"名称"、"值"列头UserGuide 的"下一步"按钮)应通过资源系统管理,而非硬编码
- MVP 阶段可以使用单一语言(中文或英文),但代码结构应支持后续扩展为多语言
- 推荐方案:使用 Avalonia 的本地化机制(`IResourceProvider`)或自定义 `LocalizationManager`
**4. 依赖管理原则:**
- **最小化第三方依赖**:除了 Avalonia、ReactiveUI、Semi.Avalonia 外,尽量不引入其他 NuGet 包
- **锁定主要依赖版本**Avalonia 和 ReactiveUI 的主版本号应固定,避免自动升级导致 Breaking Changes
- **Semi.Avalonia 的可选性**:如果评估后发现 Semi.Avalonia 不可用或过于复杂,允许放弃使用,改为自定义样式系统(风险缓解措施)
**5. 开发工具和环境:**
- **IDE** Visual Studio 2022 或 Rider
- **版本控制:** Git托管在本地或私有仓库
- **持续集成(可选):** MVP 阶段不强制要求 CI/CD手动构建和测试即可
- **代码格式化:** 使用 `.editorconfig` 统一代码风格
**6. 性能优化原则:**
- **过早优化是万恶之源**MVP 阶段优先功能完整性,性能问题在出现时再优化
- **已知的性能需求**PropertyGrid 对 50 个属性的生成时间 < 200ms主题切换 < 100ms见 NFR
- **虚拟化和懒加载**:如果 PropertyGrid 需要支持数百个属性,考虑使用 `VirtualizingStackPanel`Post-MVP
**7. 文档和注释规范:**
- 所有公开 APIpublic class、public method必须有 XML 文档注释
- 复杂的业务逻辑应有内联注释解释设计意图
- README 应包括:快速开始、控件列表、使用示例、常见问题
**8. 颜色系统和字体配置:**
- **苹果颜色系统的具体实现细节(颜色值、命名规范)将在架构和开发阶段由 UX Expert 确定**PRD 只明确方向
- **字体配置的具体 fallback 策略将在实现时补充**PRD 只定义目标字体族
---