跨越多个领域的关系?

时间:2017-09-01 19:33:41

标签: realm

领域:

我们有以下情况:有几个商店有员工和客户,有几个员工可以在多个商店工作,还有几个客户可以在多个商店购物。这可以用这些类来表示

class Store {
    dynamic var id = ""
    dynamic var address = ""
    let workers = List<Employee>()
    let customers = List<Customer>()
}

class Customer {
    dynamic var id = ""
    dynamic var name = ""
    let stores = LinkingObjects(fromType: Store.self, property: "customers") 
    // ... many more fields about this customer
}

class Employee {
    var id
    var name
    let work = LinkingObjects(fromType: Store.self, property: "workers")
}

这里的问题是我们必须保护客户信息,因此没有任何客户信息可以存在于共享领域并且需要安全。商店和员工数据都不是安全问题。我们当前的方法是为每个客户提供他们自己的领域,但是,主要的缺点是需要大量复制,因为每个客户领域必须复制商店的数据。另一个缺点是我们将客户数据复制到共享领域,这是一个安全风险。构建允许不同领域之间关系的场景的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

Realm目前不支持Realms中的“直接”对象链接,类似于同一Realm中的对象属性。

相反,我建议你做的是给你的对象主键(你可以直接声明你现有的id字段,或者如果你现有的{{1}那么创建一个新的internalId字段}}字段不能用于此目的)。

主键是必需的,必须是唯一的,并且在设置后不能更改,这使它们非常适合唯一标识对象。 Our documentation更详细地讨论了它们。

然后,您可以只为相关客户存储主键,而不是直接将客户信息/客户对象存储在共享领域中,例如在列表中。 (现在你必须创建一个包装器id对象来存储客户的主键,但我们计划很快支持直接包含字符串或其他原始类型的集合。)

您可以通过在对象上添加辅助方法来进一步增强此功能,这些方法可以在客户Realm中传递并返回用户对象(或任何对象的主键存储),并自动在Realm中查找。您可以使用CustomerKey的{​​{3}}方法根据主键查找对象。

主要限制是您不会自动更新使用对象,列表和Realm属性获得的链接。您必须自己手动执行簿记。

如果您想要在Realm中看到的功能超出我在此处发布的功能,请随时在我们的object(ofType:forPrimaryKey)分享您的想法。我们欢迎功能要求。