Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure:defrecord和defschema之间的差异_Clojure_Compojure_Compojure Api - Fatal编程技术网

Clojure:defrecord和defschema之间的差异

Clojure:defrecord和defschema之间的差异,clojure,compojure,compojure-api,Clojure,Compojure,Compojure Api,我对clojure不熟悉。我想从数据库中获取带有字段的x条记录,并想将记录插入数据库。在这个场景中,我应该在defrecord和defschema之间使用哪一次 它们是否相同?defschema和defsrecord不涉及数据库模式(“数据库的形状”)或记录(即关系数据库中的行) 是一个库,用于描述数据的形状,并验证某些数据是否符合此形状。它与最近的类似。Clojure记录是定制的数据类型,看起来有点像Java类 很容易尝试编写“面向对象”的数据库通信,其中包含每个实体的记录。然而,所有数据库包

我对clojure不熟悉。我想从数据库中获取带有字段的x条记录,并想将记录插入数据库。在这个场景中,我应该在
defrecord
defschema
之间使用哪一次


它们是否相同?

defschema
defsrecord
不涉及数据库模式(“数据库的形状”)或记录(即关系数据库中的行)

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

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

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


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

如果我没有错的话。defschema派生自schema.core(clojure脚本库)。defschema和defrecord都不同。在这个场景中,我应该使用defrecord。如果我错了,请纠正我。