我是clojure的新手。我想用数据库中的字段获取x记录,并希望将记录插入数据库。在这种情况下,我应该在defrecord
和defschema
之间使用哪一次?
那些是一样的吗?
答案 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
是一个强大的工具。