Files
LanMountainDesktop/docs/auto_commit_md/20250525_01cf32a.md

6.9 KiB
Raw Blame History

Git 提交分析报告

提交哈希: 01cf32a610
提交时间: 2026-05-25 09:32:58 +0800
作者: lincube <lincube3@hotmail.com>
提交信息: changed.调整融合桌面组库的相关圆角


变更统计

  • 修改文件数: 5
  • 新增行数: 59
  • 删除行数: 3
  • 净变更行数: +56

变更文件

文件 变更类型 变更行数
LanMountainDesktop.Tests/ComponentCategoryIconResolverTests.cs 新增测试 +14
LanMountainDesktop/ComponentSystem/ComponentCategoryIconResolver.cs 重构 +23 / -2
LanMountainDesktop/Views/ComponentLibraryWindow.axaml 修复 +1 / -1
LanMountainDesktop/Views/FusedDesktopComponentLibraryWindow.axaml 添加圆角 +1
LanMountainDesktop/Views/FusedDesktopComponentLibraryWindow.axaml.cs 新增逻辑 +22

详细变更分析

1. LanMountainDesktop/ComponentSystem/ComponentCategoryIconResolver.cs

核心逻辑重构:

变更 1: 添加预定义图标映射

+ var icon = categoryId.ToLowerInvariant() switch
+ {
+     "clock" => Icon.Clock,
+     "date" => Icon.Calendar,
+     "weather" => Icon.WeatherSunny,
+     "board" => Icon.Edit,
+     "media" => Icon.Play,
+     "info" => Icon.News,
+     "calculator" => Icon.Calculator,
+     "study" => Icon.Book,
+     "file" => Icon.Folder,
+     _ => (Icon?)null
+ };
+
+ if (icon.HasValue)
+ {
+     return icon.Value;
+ }

变更说明:

  • 添加了 10 种常用分类的预定义图标映射
  • 使用 switch 表达式,代码更简洁
  • 优先匹配预定义映射,提升性能

变更 2: 变量重命名

- if (Enum.TryParse<Icon>(firstComponent.IconKey, ignoreCase: true, out var icon))
+ if (Enum.TryParse<Icon>(firstComponent.IconKey, ignoreCase: true, out var resolvedIcon))
  • 避免与新添加的 icon 变量冲突

2. LanMountainDesktop.Tests/ComponentCategoryIconResolverTests.cs

新增单元测试:

测试 1: Date 分类图标解析

[Fact]
public void ResolveCategoryIcon_Date_ResolvesCorrectly()
{
    var result = ComponentCategoryIconResolver.ResolveCategoryIcon("Date", []);
    Assert.Equal(Icon.Calendar, result);
}

测试 2: Study 分类图标解析

[Fact]
public void ResolveCategoryIcon_Study_ResolvesCorrectly()
{
    var result = ComponentCategoryIconResolver.ResolveCategoryIcon("Study", []);
    Assert.Equal(Icon.Book, result);
}

测试覆盖:

  • Date 分类 → Calendar 图标
  • Study 分类 → Book 图标
  • ⚠️ 建议:添加其他预定义映射的测试用例

3. LanMountainDesktop/Views/ComponentLibraryWindow.axaml

修复: 控件类型名称更新

- <fi:SymbolIcon Symbol="{Binding Icon}"
+ <fi:FluentIcon Icon="{Binding Icon}"
  • 变更: SymbolIconFluentIcon
  • 原因: 保持 API 一致性,使用最新的 FluentIcons.Avalonia API

4. LanMountainDesktop/Views/FusedDesktopComponentLibraryWindow.axaml

添加圆角属性:

+ CornerRadius="{DynamicResource DesignCornerRadiusLg}"

应用到主 Border 容器,确保与其他 UI 组件的圆角风格一致。


5. LanMountainDesktop/Views/FusedDesktopComponentLibraryWindow.axaml.cs

新增圆角应用逻辑:

变更 1: 添加依赖

using LanMountainDesktop.Appearance;
using LanMountainDesktop.Settings.Core;

变更 2: 构造函数中调用圆角应用

public FusedDesktopComponentLibraryWindow()
{
    InitializeComponent();
+   ApplyFluentCornerRadius();
    // ...
}

变更 3: 新增 ApplyFluentCornerRadius 方法

private void ApplyFluentCornerRadius()
{
    if (RootGrid is null)
    {
        return;
    }

    var tokens = AppearanceCornerRadiusTokenFactory.Create(
        GlobalAppearanceSettings.CornerRadiusStyleFluent);
    RootGrid.Resources["DesignCornerRadiusMicro"] = tokens.Micro;
    RootGrid.Resources["DesignCornerRadiusXs"] = tokens.Xs;
    RootGrid.Resources["DesignCornerRadiusSm"] = tokens.Sm;
    RootGrid.Resources["DesignCornerRadiusMd"] = tokens.Md;
    RootGrid.Resources["DesignCornerRadiusLg"] = tokens.Lg;
    RootGrid.Resources["DesignCornerRadiusXl"] = tokens.Xl;
    RootGrid.Resources["DesignCornerRadiusIsland"] = tokens.Island;
    RootGrid.Resources["DesignCornerRadiusComponent"] = tokens.Component;
}

变更说明:

  • 动态应用全局圆角设置到窗口的资源字典
  • 支持 Fluent 风格的圆角配置
  • 使用工厂模式创建圆角 Token

代码架构分析

新增依赖关系

FusedDesktopComponentLibraryWindow.axaml.cs
├── LanMountainDesktop.Appearance
│   └── AppearanceCornerRadiusTokenFactory
└── LanMountainDesktop.Settings.Core
    └── GlobalAppearanceSettings

圆角系统架构

组件 职责
AppearanceCornerRadiusTokenFactory 工厂类,创建圆角配置
GlobalAppearanceSettings 全局外观设置,包含圆角风格
DesignCornerRadius* 动态资源键,存储具体圆角值

代码审查要点

潜在问题

  1. 测试覆盖:

    • ⚠️ 中等风险:只添加了 2 个新测试用例
    • 建议添加其他 8 个预定义映射的测试
  2. API 一致性:

    • ⚠️ 低风险:SymbolIconFluentIcon 的变更需要确认是否影响其他位置
    • 建议:搜索项目中所有 SymbolIcon 的使用
  3. 空值处理:

    • 良好:switch 表达式正确处理了未知分类
    • 良好fallback 到原有逻辑
  4. 性能考虑:

    • 优化:预定义映射避免了遍历组件列表
    • 优化:直接使用 ToLowerInvariant() 而非忽略大小写比较

建议

  • 代码质量: 重构清晰,逻辑简化
  • 测试: 添加了单元测试,但可以更全面
  • ⚠️ 文档: 考虑更新 ComponentCategoryIconResolver 的文档
  • 📝 代码规范: 遵循项目现有的代码风格

影响范围

  • 图标系统: 增强了分类图标解析功能
  • UI/UX: 统一了圆角风格
  • 测试覆盖: 新增 2 个单元测试
  • 依赖关系: 新增对 Appearance 和 Settings 模块的依赖

功能评估

新增功能

  1. 预定义图标映射: 10 种常用分类现在有明确的图标
  2. 动态圆角应用: 支持 Fluent 风格的圆角配置
  3. API 更新: 使用最新的 FluentIcons.Avalonia API

改进点

  1. 性能优化: 预定义映射提升解析速度
  2. 代码可维护性: 使用 switch 表达式更易读
  3. 一致性: 统一使用 FluentIcon 控件

总结

这是一次全面的功能增强提交,主要改进包括:

  1. 重构图标解析逻辑,添加预定义映射
  2. 统一圆角风格,支持动态配置
  3. 更新 API 使用 FluentIcon
  4. 添加单元测试

建议: 可以合并,建议后续补充其他预定义映射的测试用例。