如何处理库中需要在库外部设置的变量?

2024-01-12

我在多个项目中使用 Datomic,是时候将所有通用代码移动到一个小型实用程序库中了。

一项挑战是处理共享数据库uri,大多数操作都依赖于它,但必须由使用该库的项目进行设置。我想知道是否有一种行之有效的方法可以做到这一点。以下是我考虑过的一些替代方案:

  • 丢弃uri库中的符号并将 uri 作为参数添加到访问数据库的每个函数

  • 通过改变它alter-var-root,或类似的机制,在 init 函数中

  • 将其作为动态变量保存在库中*uri*并覆盖希望较小的适配器层中的值,例如

    (def my-url ...bla...)

    (定义我的乐趣 [args] (带有 datomic-urimy-uri(应用库/my-fun 参数))

  • Keeping uri作为库中的原子


去年 Clojure/West 上 Stuart Sierra 做了一个演讲,名为大型 Clojure http://www.infoq.com/presentations/Clojure-Large-scale-patterns-techniques,处理设计模式更大的 Clojure 应用程序.

其中之一就是您所描述的问题。

总结有关当前问题的提示:

1 清除构造函数

所以你有一个明确定义的初始状态。

  (defn make-connection [uri]
      {:uri uri
       ...}

2 明确依赖关系

  (defn update-db [connection] 
     ...

3 测试更容易

(deftest t-update
  (let [conn (make-connection)]
    (is (= ... (update-db conn)))))

4 重新加载更安全

 (require ... :reload)

Keeping uri在稍后绑定的变量中很常见,但引入了隐藏的依赖关系,还假设body在单个线程上开始和结束。

观看演讲,了解更多设计技巧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理库中需要在库外部设置的变量? 的相关文章

随机推荐

  • PackedArrays 有快速的产品操作吗?

    在 Mathematica 中 包含所有机器大小的整数或浮点数的向量 或矩形数组 可以存储在压缩数组中 这些对象占用的内存较少 并且某些操作对它们的速度要快得多 RandomReal如果可能的话 生成一个压缩数组 压缩数组可以用以下命令解压
  • 猜测C2DM是否已连接的方法

    我正在尝试对是否可以接收 C2DM 消息进行最佳猜测 我创建了一个应用程序 它依赖于在物理上无法访问的情况下将信息推送到手机 我知道 C2DM 不能保证传送 但我至少想知道何时可以传送消息 如果不是 我们就会退回到我们自己的推送服务 并且实
  • 检查 pandas 数据框列的字符串类型

    我有一个相当大的 pandas 数据框 11k 行和 20 列 一列具有混合数据类型 主要是数字 浮点 其中散布着少量字符串 在使用混合列中的数据执行一些统计分析之前 我通过查询其他列来对该数据帧进行子集化 但如果存在字符串 则无法执行此操
  • 如何在自定义错误页面中访问 HTTP StatusDescription

    当操作 asp net mvc 5 在数据库中找不到某些内容时 用户必须看到一个带有简短自定义错误消息的页面 例如 Invoice 5 does not exist 此外 响应必须有一个404HTTP 代码 另一个例子 当操作被不正确地调用
  • 使用 Apache POI 在 java 中读取和写入 xls 和 xlsx excel 文件

    我正在编写一个程序 需要读取和写入 Excel 文件 无论格式如何 xls 或 xlsx 我知道 Apache POI 但它似乎有不同的类来处理 xls 文件 HSSF 和 xlsx XSSF 文件 任何人都知道我如何实现我在这里想做的事情
  • 如何在node.js的客户端包含javascript?

    我是 Node js 和 javascript 的初学者 我想在 html 代码中包含外部 javascript 文件 这是 html 代码 index html 并且 这里是 javascript 代码 simple js documen
  • 使用 ITextSharp 将 tif 转换为 pdf 的性能不佳

    Summary 如何减少将 tif 转换为 pdf 所需的时间itextsharp 背景 我正在使用 C 将一些相当大的 tif 转换为 pdfitextsharp 而且我的表现非常糟糕 每个 tif 文件大约 50kb 某些文档最多有 1
  • Webpack 源映射指向缩小包

    我正在为现有项目设置 Webpack 构建过程 并且遇到了源映射的一些问题 我在用devtool eval source map 如果浏览器中发生错误 堆栈跟踪中的每个文件 行号都指向 Webpack 包中压缩为一行的文件 例如 堆栈跟踪的
  • Android - 视图实例在屏幕旋转时获取空值

    我正在使用 Kotlin Android 扩展通过其 id 直接访问视图 我有一个进度条 我可以使用 id 直接在片段中访问它 即progress bar
  • 如何使用 Jasmine 测试 XMLHttpRequest

    如何在没有 jQuery 的情况下测试 XMLHttpRequest 或纯 Javascript AJAX 上的 onreadystatechange 我这样做是因为我正在开发 Firefox 扩展 我想我必须使用间谍 但不知道如何使用 因
  • 对端口“COM1”的访问被拒绝

    我试图打开 COM1 端口 但收到此错误消息 访问端口 COM1 被拒绝 我正在编写一个通过 NET 发送短信的程序 我预计可能会出现错误 但不应出现 访问被拒绝 错误 请给我任何解决方案 如果端口需要任何访问权限 那么我该怎么做 首先 确
  • OOAD书籍推荐:从理论到实践[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我致力于成为一名优秀的面向对象开发人员 OO 引起了我的兴趣 因为我理解模式 知道为什么组合比继承给你更
  • MVC UpdateModel 可以使用企业库 VAB 吗?

    或者我应该说 将 Enterprise Library 5 VAB 与 MVC 结合使用的最简洁方法是什么 我目前使用的形式 ActionResult Save int id FormCollection form SomeModel mo
  • Azure 容器实例在没有明显原因的情况下被终止

    我们每天运行容器实例组 由逻辑应用程序触发 容器基本上连接到队列 处理它并结束 有时 根据事件日志 容器被杀死 日志中没有任何内容 除了我们的应用程序所做的最后一件事 并且它不是在处理结束时 我检查了资源 我们远远低于限制 另外 这种情况并
  • 如何验证以下场景的表单? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对网络开发比较陌生 我的网站使用 HTML jQuery 和 PHP 我想设计一个表单并通过以下方式验证它 一个简单的网页 有输入框 2
  • pyspark - 在 Spark 会话中获得一致的随机值

    我想将一列随机值添加到数据帧 每行都有一个 id 对于我正在测试的东西 我是努力在 Spark 会话中获得可重复的结果 每个行 id 的随机值相同 我能够通过使用重现结果 from pyspark sql functions import
  • Go:如何检查一个字符串是否包含多个子字符串?

    strings Contains str to check substr 仅接受一个参数作为要检查的子字符串 如何在不使用的情况下检查多个子字符串strings Contains 反复 eg strings Contains str to
  • Ruby 和指针

    我正在为一个小游戏编写一个地下城生成器 地下城由房间组成 Aroom has connections到其他房间 room connections room a room b and room number 1 unique id 现在我需要
  • 无法在 Argo 工作流程中使用 jsonpath 函数作为输出参数

    我正在使用一个工作流程jsonpath函数用于输出参数从 json 字符串中提取特定值 但失败并出现此错误Error exit code 255 这是我的工作流程 apiVersion argoproj io v1alpha1 kind W
  • 如何处理库中需要在库外部设置的变量?

    我在多个项目中使用 Datomic 是时候将所有通用代码移动到一个小型实用程序库中了 一项挑战是处理共享数据库uri 大多数操作都依赖于它 但必须由使用该库的项目进行设置 我想知道是否有一种行之有效的方法可以做到这一点 以下是我考虑过的一些