Structuring large Clojure codebases with Biff
10 months ago
- #Web Development
- #Clojure
- #Database Optimization
- Jacob O'Bryant正在从头重写阅读应用Yakread,并将其开源。
- 他正在为Clojure网络框架Biff试验新功能,以管理更大的代码库。
- 旧版Yakread存在查询缓慢问题,例如加载订阅数据需要10秒以上。
- 通过为XTDB实现物化视图(存储在RocksDB中),避免了传统的反规范化处理。
- 物化视图使用纯'反规范化器'函数实现数据的增量更新。
- 采用基于属性的测试和验证物化视图的预言函数,简化了测试流程。
- 新版Yakread所有应用代码均为纯函数,单元测试中无需模拟对象。
- 函数被设计为状态机结构,将纯逻辑与副作用处理分离。
- 副作用处理集中化且保持简洁,提升了可测试性和可观测性。
- 单元测试通过对比函数输出与预存的EDN文件来验证,使测试更便捷。
- 代码库使用Pathom解析器分离模型和视图代码,类似OOP但基于纯数据。
- Pathom解析器处理数据库查询、派生数据甚至UI片段,保持代码模块化。
- GET请求处理器定义Pathom查询,简化后端逻辑并提升清晰度。
- 该方法类似Fulcro,但针对htmx的服务器端渲染进行了适配。
- Yakread的重写仍在进行,计划将成功实验整合到Biff框架中。