主要观点:作者在重写 Yakread 并开源,过程中为 Clojure 网络框架 Biff 试验新功能,介绍 Yakread 的新架构方法。
关键信息:
- Materialized views:解决“Old Yakread”查询慢的问题,通过实现 XTDB 的物化视图,将去规范化数据存储在专用 RocksDB 实例中,定义纯“反规范化器”函数,Biff 处理其他事务,用 Fugato 编写的代码可生成测试数据用于属性测试。
- Separating application logic from effects:“New Yakread”的应用代码 100%纯,将带有应用逻辑的函数转换为小状态机,纯应用逻辑需要执行有副作用的操作时返回描述副作用的数据,让机器转换到有副作用的状态,测试时每个纯应用逻辑状态可单独调用,方便单元测试和观察性。
- Pathom:代码库分为一堆 Pathom 解析器,作者将其与 OOP 比较,Pathom 让模型和视图代码分离,通过定义“解析器”获取或返回数据,帮助应用代码保持纯,用于分离模型和视图代码,每个 GET 请求处理程序定义 Pathom 查询,中间件运行查询并传递结果。
重要细节: - Yakread 原代码约 10k 行,已较复杂,开源仓库功能有限但有上述方法的示例。
- 曾尝试 Materialize 因内存开销大未成功,还打算研究 Rama 和 Feldera。
- 感谢 Chris Badahdah 介绍单元测试方法。
- Yakread 重写还有很长路要走,试验阶段结束后将提取部分作为 Biff 的一部分发布。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。