繁体   English   中英

领域对象中的两个关联关系

[英]two connected relationships in a realm object

我对领域还很陌生,因此我试图为REST API与存储到领域对象之间的交互找到正确的设计。 到目前为止,我有一个Animal对象,如下所示:

class Animal: Object, Mappable {
    dynamic var id = ""
    dynamic var userId = ""
    dynamic var name = ""
    dynamic var gender = ""
    dynamic var breed: Breed?
    dynamic var type: Type?

    //extra
    var mainPhotoIndex = 0


    override static func primaryKey() -> String? {
        return "id"
    }


    required convenience init?(map: Map) {
        self.init()
    }

}

但是问题是我不确定如何处理“ TypeBreed关系,因为类型包括所有品种的列表,这意味着要检索具有相应品种名称和类型名称的动物,我必须在服务器端填充这两个属性,当我在动物对象上只需要检索TypeBreed的两个名称时,这将使JSON对象变得庞大。 我发现的另一种方法是只保存String ObjectId,然后在领域数据库中按该ID进行过滤,但不确定这是最佳实践。 那么,在这里我需要在服务器端传递什么?我应该如何设计动物界对象?

类型

class Type: Object, Mappable {
    dynamic var id = ""
    dynamic var name = ""
    var breeds = List<Breed>()

    override static func primaryKey() -> String? {
        return "id"
    }

    required convenience init?(map: Map) {
        self.init()
    }

}

品种

class Breed: Object, Mappable {
    dynamic var id = ""
    dynamic var name = ""

    override static func primaryKey() -> String? {
        return "id"
    }

    required convenience init?(map: Map) {
        self.init()
    }

}

你是完全正确的。 您的模式设置正确,但是正确的是,从JSON字符串映射Animal ,还必须包括TypeBreed所有内容。 但是应该对此做出妥协。

听起来TypeBreed是两组完全静态的数据,它们几乎完全独立于Animal 他们也有主键。 在所有情况下,我建议您下载所需的所有BreedType内容,并在第一次需要时将其本地保存到Realm。

之后,每当您请求Animal ,JSON字符串的内容而不是包括BreedType对象的内容,都可以简单地包括必要对象的主键。 然后,在ObjectMapper中执行映射操作时,您可以手动使用这两个键,在Realm中查询适当的对象,然后将它们完全本地链接到磁盘上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM