mcpField
C
composable-architecture

composable-architecture

github.com/johnrogers开发233216 次安装40 周前更新
代码仓库

关于 composable-architecture

The Composable Architecture (TCA) 是面向复杂、可测试功能开发者的架构参考技能,聚焦可组合 reducer、集中状态管理、副作用处理与测试模式。

主要功能

  1. 01可组合的 reducer 结构
  2. 02集中管理状态与依赖
  3. 03副作用处理与取消
  4. 04导航与呈现模式
  5. 05TestStore 测试指南

适用场景

  1. 01组织复杂的应用功能
  2. 02管理异步副作用与取消
  3. 03组合导航与界面呈现
  4. 04测试状态变化与依赖

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/johnrogers/claude-swift-engineering --skill composable-architecture

安装后在 Claude Code 中输入/composable-architecture确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
dependencies.md
effects.md
navigation-advanced.md
navigation-basics.md
performance.md
presentation.md
reducer-structure.md
shared-state.md
testing-advanced.md
testing-fundamentals.md
testing-patterns.md
testing-utilities.md
views-binding.md
views-composition.md

详细介绍

The Composable Architecture(TCA)

TCA 通过可组合的 reducer、集中式状态管理和副作用处理,为构建复杂且可测试的功能提供架构。其核心原则是:状态演进可预测,依赖关系清晰,副作用可测试。

参考资料加载指南

只要有哪怕一丝可能需要用到相关内容,就务必加载参考文件。 有上下文总比错过模式或犯错更好。

参考资料加载时机
Reducer 结构创建新 reducer、设置 @Reducer、State、Action 或 @ViewAction 时
视图 - 绑定使用 @Bindable、双向绑定、store.send() 或 .onAppear/.task 时
视图 - 组合使用带有 store 的 ForEach、作用域限定到子功能,或使用可选子功能时
导航 - 基础设置 NavigationStack、路径 reducer、推入/弹出页面,或以编程方式关闭页面时
导航 - 高级深度链接、递归导航,或将 NavigationStack 与弹出页结合使用时
共享状态使用 @Shared、.appStorage、.withLock,或在功能之间共享状态时
依赖项创建 @DependencyClient、使用 @Dependency,或设置测试依赖项时
副作用使用 .run、.send、.merge、定时器、副作用取消或异步工作时
呈现使用 @Presents、AlertState、弹出页、弹出窗口或 Destination 模式时
测试 - 基础设置测试套件、makeStore 辅助工具,或了解 Equatable 要求时
测试 - 模式测试操作、状态变更、依赖项、错误或呈现时
测试 - 高级使用 TestClock、keypath 匹配、exhaustivity = .off 或基于时间的测试时
测试 - 实用工具使用测试数据工厂、LockIsolated、ConfirmationDialogState 测试或 @Shared 测试时
性能优化状态更新、高频操作、内存或 store 作用域时

常见错误

  1. 过度拆分功能 — 将功能拆成过多小型 reducer 会增加状态管理难度和组合开销。除非确实需要复用,否则应将相关状态和操作放在一起。

  2. 错误管理副作用的生命周期 — 状态变化时忘记取消副作用,会导致数据过时、重复请求或竞态条件。按顺序执行副作用时使用 .concatenate,并在适当时使用 .cancel。

  3. 导航状态放错位置 — 将导航状态放在子 reducer 而非父 reducer 中,会导致不必要的视图重新加载和状态不一致。导航状态应属于拥有导航结构的功能。

  4. 测试时不检查 TestStore 的穷尽性 — 跳过对“简单”副作用或“显而易见”状态变化的 TestStore 断言,就会漏掉错误。务必使用穷尽性检查;它能及早发现回归问题。

  5. 错误混用 async/await 和 Effects — 未妥善处理取消或错误,就将 async/await 转换为 .run 副作用,会丢失隔离保证。应在 .run 中使用 yield 语句谨慎封装异步操作。

评论

支持 Markdown