在clojure应用程序中放置数据库访问/功能的位置?

mlo*_*vic 6 functional-programming clojure

我正在编写一个小型的Clojure应用程序,该应用程序与具有2-3个不同集合的MongoDB数据库进行了大量交互.

我来自OOP/Ruby/ActiveRecord背景,其中标准做法是为每个数据模型创建一个类,并为每个数据模型提供访问权限.我在我的clojure项目中开始做同样的事情.每个"数据模型"都有一个命名空间,每个命名空间都有自己的数据库连接和CRUD函数.然而,这并不觉得非常实用或Clojure的样,我想知道是否有这样做,如具有更习惯的方法datadatabase命名空间类似的功能get-post,并限制到只有该命名空间访问数据库.

这似乎有利于将数据库客户端依赖关系仅隔离到一个命名空间,并且还将纯函数与具有副作用的函数分离.

另一方面,我还需要一个名称空间,我需要从我的应用程序的许多不同部分引用它,并且拥有一个名为"data"的命名空间对我来说似乎很奇怪.

在Clojure中是否有传统的,惯用的方式?

小智 2

Stuart Sierra 出色的组件库提出了一种很好的、​​可以说是最惯用的(在 Clojure 雷达上得分为“采用”)管理 Clojure 应用程序状态的方法。简而言之,组件的理念是将所有有状态资源存储在一个显式定义它们相互关系的映射中,然后以您的函数仅将状态传递给彼此的方式构建代码。system