学习 Ash:声明式 Elixir 应用、测试与可扩展性

原标题Learning Ash: Declarative Elixir Apps, Testing and Extensibility

Rebecca Le 和 Zach Daniel 解释他们的书与框架如何共同演进。

RLRebecca Le嘉宾 · AlembicZDZach Daniel嘉宾 · Remedy Meds
频道
GOTO Conferences
发布
2026年10月19日
视频
28:23
阅读
5 分钟
原文
英语
在 YouTube 打开
往下滚动阅读时,视频会缩到右下角继续播放。字幕跟随阅读语言。
阅读语言共 2 种语言可读
由 AI 从英语原文翻译。打开“对照原文”可以逐段核对。
摘要

30 秒看懂

Christian Alexander 采访 Ash 维护者 Rebecca Le 和 Zach Daniel,讨论领域建模教学、测试支持、Cinder 库以及强大声明式抽象的权衡。

  1. 1在上下文中教学书在示例应用需要时引入框架功能。
  2. 2可扩展性是核心目标资源和动作支持 API、事件及其他集成扩展。
  3. 3写书推动测试改进尝试教授测试促成了框架中的生成器支持。
  4. 4Cinder 抽象重复的表格工作Le 构建可复用库来过滤、搜索和展示数据。
  5. 5理解强大的默认行为便捷的 API 生成仍要求理解暴露范围和授权。

要点建议

  1. 书先教授领域建模,再逐步加入身份验证、策略和测试。
  2. Ash 可扩展的资源与动作支持多种接口和集成。
  3. 编写测试章节促成了新的生成器工具。
  4. 强大的抽象减少重复工作,但仍需要理解安全与行为。
全文

按章节阅读整理后的全文

只看原始文稿
01

通过应用学习 Ash

作者解释书中的渐进学习路径。

Christian Alexander 采访 Elixir Ash 框架书籍的合著者 Rebecca Le 和 Zach Daniel。他们讨论框架的学习、可扩展性、测试及其社区库。

Le 说她从 1.x 早期开始使用 Ash,参与核心团队、文档和用户界面库,包括 Cinder 数据表库。Daniel 回顾了构建 Ash 的过程,以及 Le 团队在客户项目中使用早期版本时提出的建设性反馈。

Alexander 说自己曾多次学习 Ash 遇挫,因为在理解应用之前就从关系和权限入手。书中的渐进路径帮助了他。Le 说这是有意设计的:框架的组件都存在,但学习者需要看到它们如何组合。

书先介绍领域建模,再随着示例应用的需要引入身份验证、策略和测试。Le 强调,即使这些不是最先教授的概念,也应在部署和接触真实用户前加入安全措施与测试。

音乐应用 Tunez 让书有空间展示关系、测试和原子操作,而不需要读者创建大量内容。Le 说作者在其他示例和功能之间作了取舍,以控制篇幅。

02

扩展与测试

稳定核心和写书推动的改进支持生态发展。

Alexander 观察到,熟悉的基础构件可以支持后续功能,例如 TypeScript 绑定和 AI 工具。Daniel 说,可扩展性是明确的早期目标:扩展可以增加能力或改变动作的工作方式,而核心概念仍然有用。

由于生态变化很快,作者曾怀疑是否太早编写基础教材。Daniel 说他们希望书中的例子保持稳定,而随着选项和扩展增加,核心概念大体保持了稳定。

Daniel 回忆,有些用户读完策略指南后仍难以应用。完整参考文档很有价值,但通过具体应用建立学习路径,可以让抽象规则更容易与实际决策联系起来。

Daniel 把具有强默认约定的框架比作预先准备好的套餐,把 Ash 比作可自选配料的餐碗:团队可以组合扩展以适应自己的场景。他以事件驱动扩展为例,说明扩展可以改变动作的实现方式。

写书也改变了框架。Le 说,作者最初没有加入测试指导,因为 Ash 应用本身是普通 Elixir 应用,但用户反复询问如何测试动作。尝试解释这一过程,最终促成了基于生成器的测试数据支持和测试章节。

Daniel 说,当他试图解释现有测试方法时,意识到缺少工具。团队没有只是记录一个不理想的流程,而是构建了让方法更易于使用和教学的功能。

Alexander 认为测试核心动作很有价值,因为不同界面和 API 都建立在它们之上。几位嘉宾介绍声明式策略和动作如何提供共同基础,同时应用所依赖的行为仍需要实际测试。

03

Cinder 与共享构件

几位嘉宾讨论可复用表格和社区贡献。

Le 解释了自己为什么构建 Cinder:应用反复需要可搜索、过滤和分页的表格。她制作了一个能够组合过滤条件、生成界面元素和查询数据的抽象原型;此后该库增加了更多自定义能力。

Daniel 说,他的团队用 Cinder 替换了内部表格实现并删除了一些代码。他认为使用自己没有设计的社区贡献很有成就感,并以 Ash Authentication 作为生态共享工作的另一个例子。

Alexander 介绍将应用迁移到 Ash 的经历:把数据库表表示为资源,并用领域、资源及访问模式替代大型 context 模块。按他的经验,共同抽象让添加功能更容易,但工作仍依赖对模型的理解。

04

学习曲线与强大抽象

嵌套表单、API 和 AI 辅助展示其中的权衡。

几位嘉宾认为,Ash 的 DSL 和概念带来前期学习曲线。Le 将其与容易入门、但需求复杂后可能更难使用的工具进行对比。他们说,开发者理解资源、动作和策略后,这些概念会在不同扩展中反复出现。

Alexander 强调书中音乐示例的嵌套表单:使用 Ash Phoenix 辅助工具,可以在创建专辑时创建歌曲。Daniel 又以 API 生成为例,说明如何从领域模型派生接口。

Daniel 提醒,一行将功能暴露为 API 的代码可能做很多事。这种便利很强大,但工程师需要理解它暴露了什么,以及授权如何生效。他用光剑作比喻,表达学习投入和误用可能带来的后果。

Daniel 表示,AI 助手和已有示例帮助其公司的新工程师更快学习 Ash 与 Elixir,并说社区里的基础问题变少了。这些是他对团队和社区的观察,而非对学习效果的受控测量。

Alexander 最后建议学习者跟随书中的步骤构建示例,观察各个部分如何连接。作者感谢主持人和观众。

同频道的其他文章

3 张幻灯片39:12EN → 简体中文
GOTO Conferences· 2026年10月28日Cate Huston:严谨如何支撑 AI 辅助开发的交付速度Cate Huston · Twill两人团队分享发布关口、自动检查、优先级和加快交付的成本。AI 工程管理Software engineeringAI agents
4 张幻灯片22:33EN → 简体中文
GOTO Conferences· 2026年10月26日William Schor:Netflix 如何从单元测试走向合成金丝雀William Schor · Netflix用生成的工作负载和接近生产的基础设施,测试分布式键值服务。Software engineering
5 张幻灯片34:11EN → 简体中文
GOTO Conferences· 2026年10月23日Anatoliy Bilenko 和 Alberto Carretero:用形式化方法和 AI 让数据库协议可靠Anatoliy Bilenko, Alberto Carretero · CanonicalCanonical 的数据库工程师把可执行规格、基于模型的测试、故障探索和重建的执行历史串起来,并说明为什么这些方法单独用,都无法证明真实系统正确。开发流程与测试Code review & verification可观测性与可靠性+2
28:15EN → 简体中文
GOTO Conferences· 2026年10月22日Steve Poole:开源安全与 AI 带来的维护挑战Olimpiu Pop, Steve Poole为什么漏洞发现加速会给维护者、依赖使用者和升级流程增加压力。Software engineeringAI security
5 张幻灯片46:36EN → 简体中文
GOTO Conferences· 2026年10月21日Don Syme:围绕人类协作构建 Agent 自动化Don Syme · GitHubContinuous AI、仓库工作流,以及无人值守软件维护所需的防护措施。Agent orchestrationSoftware engineering编程智能体
38:07EN → 简体中文
GOTO Conferences· 2026年10月9日Garrison Hinson-Hasty:使用 Zig 进行系统编程Trevor Berrange Sanchez, Garrison Hinson-Hasty一场关于简单性、内存、字符串、图形 API 和 C 互操作的对话。Programming LanguagesSoftware engineering