2017-07-25 69 views
0

我是clojure的新手。我想从数据库中获取带有字段的x记录,并且想要将记录插入到数据库中。在这种情况下,我应该使用defrecorddefschema之间的哪一个?Clojure:defrecord和defschema的区别

这些是一样的吗?

+0

如果我没有错。 defschema源自schema.core(clojure脚本库)。 defschema和defrecord都是不同的。在这种情况下,我应该使用defrecord。如果我错了,请纠正我。 – Srini

回答

1

defschemadefrecord不引用数据库模式(“数据库形状”)也不引用记录(即关系数据库中的行)。

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

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

一个良好的开端是Honey SQL,它允许你将SQL查询构建为Clojure数据结构。您可以获取数据并使用Clojure的全部功能对数据进行操作。然后,当你对“打开所有的数据(没有封装)”感到满意时,去描述你的数据的形状,什么是有效的,什么不是。 clojure.spec是一个强大的工具。