Clojure:defrecord和defschema之间的区别

时间:2017-07-25 07:07:29

标签: clojure compojure compojure-api

我是clojure的新手。我想用数据库中的字段获取x记录,并希望将记录插入数据库。在这种情况下,我应该在defrecorddefschema之间使用哪一次?

那些是一样的吗?

1 个答案:

答案 0 :(得分:1)

- (void)lazyImageView:(DTLazyImageView *)lazyImageView didChangeImageSize:(CGSize)size { NSURL *url = lazyImageView.url; NSPredicate *pred = [NSPredicate predicateWithFormat:@"contentURL == %@", url]; // update all attachments that matching this URL for (DTTextAttachment *oneAttachment in [self.attributedTextContentView.layoutFrame textAttachmentsWithPredicate:pred]) { oneAttachment.originalSize = size; } // need to reset the layouter because otherwise we get the old framesetter or cached layout frames self.attributedTextContentView.layouter = nil; // here we're layouting the entire string, // might be more efficient to only relayout the paragraphs that contain these attachments [self.attributedTextContentView relayoutText]; } defschema不是指数据库架构("数据库的形状"),也不是指记录(即关系数据库中的行)。

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

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

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

然后,当您熟悉"打开所有数据(没有封装)"时,请描述数据的形状,什么是有效的,什么是不。 defrecord是一个强大的工具。