1

我是clojure的新手。我想从数据库中获取带有字段的 x 记录,并想将记录插入数据库。在这种情况下,defrecord我应该使用哪一次?defschema

那些是一样的吗?

4

1 回答 1

2

defschema并且defrecord不要参考数据库模式(“数据库的形状”)或记录(即关系数据库中的行)。

Schema是一个库,用于描述数据的形状,并验证某些数据是否符合这种形状。它类似于最近的clojure.spec。Clojure记录是自定义数据类型,看起来有点像 Java 类。

很容易想为每个实体编写带有记录的“面向对象”数据库通信。但是,所有数据库包含的都是数据,它只是列表、映射、集合和一些基本的数据类型。我建议您将数据保存在内置的 Clojure 数据结构中,随时可用,并且不要将其隐藏在不必要的抽象中。(旁注:您的 DB组件,而不是 DB 实体,很可能是 Clojure 记录。例如,组件的生命周期管理使用记录。)

Honey SQL是一个不错的起点,它允许您将 SQL 查询构建为 Clojure 数据结构。您可以取回数据,并可以使用 Clojure 的全部功能对这些数据进行操作。

然后,当您对“开放所有数据(不进行封装)”感到满意时,去描述数据的形状,什么是有效的,什么是无效的。clojure.spec是一个强大的工具。

于 2017-07-25T09:17:27.343 回答