我在几个项目中使用Datomic,是时候将所有常用代码移动到一个小型实用程序库中.
一个挑战是处理uri大多数操作所依赖的共享数据库,但必须由项目使用库设置.我想知道是否有一种成熟的方法来做到这一点.以下是我想过的一些替代方案:
删除uri库中的符号,并将uri作为参数添加到访问数据库的每个函数中
alter-var-root在init函数中通过或类似机制对其进行更改
将它作为动态var保存在库中,*uri*并覆盖希望小的适配器层中的值
(def my-url ... bla ...)
(defn my-fun [args](with-datomic-uri my-uri (apply library/my-fun args))
保持uri图书馆的原子
Stuart Sierra 上次在 Clojure/West 上做了一次名为Clojure in the Large的演示,讨论了大型 Clojure 应用程序的设计模式。
其中之一就是您所描述的问题。
总结有关当前问题的提示:
1 清除构造函数
所以你有一个明确定义的初始状态。
(defn make-connection [uri]
{:uri uri
...}
Run Code Online (Sandbox Code Playgroud)
2 明确依赖关系
(defn update-db [connection]
...
Run Code Online (Sandbox Code Playgroud)
3 测试更容易
(deftest t-update
(let [conn (make-connection)]
(is (= ... (update-db conn)))))
Run Code Online (Sandbox Code Playgroud)
4 重新加载更安全
(require ... :reload)
Run Code Online (Sandbox Code Playgroud)
将uri保留在稍后绑定的变量中非常常见,但会引入隐藏的依赖项,并且还假设body在单个线程上开始和结束。
观看演讲,了解更多设计技巧。
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |