领域对象中的两个连接关系

时间:2017-01-23 11:34:07

标签: ios swift realm

我对领域很陌生,我试图为REST API与存储到领域对象之间的交互找出正确的设计。到目前为止,我有一个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() } } 对象如下所示:

Type

但问题是,我不确定如何处理BreedType关系,因为类型包含所有品种的列表,这意味着要检索具有相应品种名称和类型名称的动物我将不得不在服务器端填充这两个属性,当我在动物对象上只需要检索Breed和{的两个名称时,这会使JSON对象变大。 {1}}。我找到的另一种方法是只保存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()
    }

}

1 个答案:

答案 0 :(得分:0)

你完全正确。您的架构是以正确的方式设置的,但是您在JSON字符串中映射Animal时需要更正,这也需要包含TypeBreed中的所有内容。但是应该可以妥协。

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

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