领域:
我们有以下情况:有几个商店有员工和客户,有几个员工可以在多个商店工作,还有几个客户可以在多个商店购物。这可以用这些类来表示
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")
}
这里的问题是我们必须保护客户信息,因此没有任何客户信息可以存在于共享领域并且需要安全。商店和员工数据都不是安全问题。我们当前的方法是为每个客户提供他们自己的领域,但是,主要的缺点是需要大量复制,因为每个客户领域必须复制商店的数据。另一个缺点是我们将客户数据复制到共享领域,这是一个安全风险。构建允许不同领域之间关系的场景的最佳方法是什么?
答案 0 :(得分:1)
Realm目前不支持Realms中的“直接”对象链接,类似于同一Realm中的对象属性。
相反,我建议你做的是给你的对象主键(你可以直接声明你现有的id
字段,或者如果你现有的{{1}那么创建一个新的internalId
字段}}字段不能用于此目的)。
主键是必需的,必须是唯一的,并且在设置后不能更改,这使它们非常适合唯一标识对象。 Our documentation更详细地讨论了它们。
然后,您可以只为相关客户存储主键,而不是直接将客户信息/客户对象存储在共享领域中,例如在列表中。 (现在你必须创建一个包装器id
对象来存储客户的主键,但我们计划很快支持直接包含字符串或其他原始类型的集合。)
您可以通过在对象上添加辅助方法来进一步增强此功能,这些方法可以在客户Realm中传递并返回用户对象(或任何对象的主键存储),并自动在Realm中查找。您可以使用CustomerKey
的{{3}}方法根据主键查找对象。
主要限制是您不会自动更新使用对象,列表和Realm
属性获得的链接。您必须自己手动执行簿记。
如果您想要在Realm中看到的功能超出我在此处发布的功能,请随时在我们的object(ofType:forPrimaryKey)
分享您的想法。我们欢迎功能要求。