用途 该工具面向持续增长的 C# 与 WinUI 应用:当功能不断堆积、代码越来越难改时,通过一次“架构检查”及早发现问题。整体流程为:调研、提议、由用户选择候选、再以小步重构保持行为不变。它指向的目标形态记录在 architecture.md 中。
何时运行 任一信号出现即可运行:里程碑结束时(improve-loop 技能会在此调用本技能);开发大功能之前,先问“改哪里能让这个功能变容易”;某个 C# 文件超过 600 行(达到 1000 行须处理)、类超过 400 行、页面的代码后置文件(.xaml.cs)超过 300 行;一个功能改动超过 6 个文件或 2 个项目;同一区域出现在 3 条修复日志中,或同类 bug 出现两次;变化频率超过每秒 10 次的状态在被大量绑定监视的模型上触发 PropertyChanged;某个依赖无法在测试中被替换。
术语约定 为保证提议可比,工具统一使用以下词汇:Module(带接口和实现的任何东西,如类、文件夹、项目);Interface(调用方必须知道的一切:签名、顺序、错误模式、线程、性能);Depth(每单位接口完成的工作量,深模块用小接口隐藏大量逻辑,浅模块只是透传);Seam(无需修改调用方即可替换行为的位置);Adapter(接缝背后的一种实现,生产与测试两种实现才使接缝真实存在);Locality(改动只触及一处);Leverage(调用方以小代价获得大能力)。
一、调研 此步不改任何代码。读取 CLAUDE.md、ARCHITECTURE.md、docs/adr/、docs/FIXLOG.md(若存在)。用 git 日志找出近 30 天高频改动文件,并按行数列出最大的 C# 与 XAML 文件。梳理项目结构与引用(dotnet list … reference)、接口与实现、同时接触 UI 线程和 I/O 的类、各线程职责。检查 C# 与 WinUI 常见摩擦:膨胀的代码后置、包揽一切的视图模型(god model)、可用 {x:Bind} 却用 {Binding}、只转发调用的包装、应用代码触及库内部(InternalsVisibleTo 用于测试项目之外)、Agent 模式外的测试钩子、所有页面都绑定的模型上的高频变化状态、UI 线程上的慢操作或 .Result/.Wait() 死锁风险、单一实现且无测试适配器的接口、同一私有类型在多个文件重复定义、远离所属功能的设置/详情页、WinUI 项目内 dotnet test 无法触达的纯逻辑、Core 引用 WinUI。对每个候选做“删除测试”:删掉该模块后复杂度是集中到一处(保留)还是扩散到所有调用方(有其价值),纯透传者不合格。
二、提议 写入 docs/architecture-review-<YYYY-MM-DD>.md,每个候选用一张卡片,包含标题(领域名词)、强度标记(Strong / Worth exploring / Speculative)、涉及文件、触发信号、问题(含一个例子)、提议(新模块及其接口,最多 15 行 C#)、收益(局部性与杠杆、哪些测试变简单)、行为不变的证明方式(单元测试、自检、快照、黄金文件、性能基线)、计划(每步一个提交)。结尾给出首选建议和“考虑过但不推荐”清单;若判断“代码没问题”也是有效结果。然后停下询问用户选哪个候选;在无人值守循环中,仅当首选为 Strong 时才执行,其余保留在文件中。
三、重构 重构前记录证明:dotnet test tests/<App>.Core.Tests 通过(并为即将改动的接口补新测试);tools/selftest.ps1 退出码为 0;运行 tools/snap.ps1 并将截图目录备份为 -before,重构后重新截图并用 Get-FileHash 逐个比对 PNG;适用时使用黄金输出(导出文件逐字节一致、旧数据库与设置文件仍可加载)和性能基线。每次提交只做一个重构,行为不变,不混入新功能。新类型放入先编译通过的新文件,再迁移调用方;每一步后应用都能通过 ./build.ps1 -Dev 构建。替换引擎时可将旧路径藏在开关后保留一个里程碑再删除。用新接口测试替换旧浅层测试而非叠加。差异涉及约 10 个文件即拆分。接口开放时,用不同约束(最少入口、最简调用方、端口与适配器)草拟两三个接口并说明选择理由。
四、记录 更新 ARCHITECTURE.md(项目、分层、依赖方向、接缝);仅当决策难以逆转、脱离上下文令人意外且存在真实权衡时,才在 docs/adr/ 新增 ADR;为重构发现的 bug 在 docs/FIXLOG.md 添加条目,每条以 Rule: 行结尾。完成标准:评审文件存在、选定的重构已分步提交、dotnet test、tools/selftest.ps1 与快照在前后结果一致、ARCHITECTURE.md 与代码相符。
适用场景与限制 适用于 C# 与 WinUI 项目的持续架构维护与重构节奏控制。资料未提供该技能的安装方式、收费信息或平台支持范围。