首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >领域模型迁移策略

领域模型迁移策略
EN

Stack Overflow用户
提问于 2015-07-12 10:10:28
回答 1查看 729关注 0票数 3

我在处理领域迁移块和迁移领域的策略时遇到了问题。

给定具有多个属性的对象MyObject:

  • 在版本1中,我们有属性myProperty
  • 在版本2中,我们将属性更改为myPropertyMk2
  • 在第3版中,我们将属性更改为myPropertyMk3

给出了以下迁移块:

代码语言:javascript
复制
    private class func getMigrationBlock(realmPath: String) -> RLMMigrationBlock {
    return { migration, oldSchemaVersion in
        if (oldSchemaVersion == RLMNotVersioned) {
            NSLog("No database found when migrating.")
            return
        } else {
            NSLog("Migrating \(realmPath) from version \(oldSchemaVersion) to \(RealmMigrationHelper.CURRENT_DATABASE_VERSION)")
        }

        NSLog("Upgrading MyObject from version %d to %d", oldSchemaVersion, CURRENT_DATABASE_VERSION)
        if (oldSchemaVersion < 2) {
            migration.enumerateObjects(MyObject.className(), block: {
                oldObject, newObject in
                newObject["myPropertyMk2"] = oldObject["myProperty"]
            })
        } 
        if (oldSchemaVersion < 3) {
            migration.enumerateObjects(MyObject.className(), block: {
                oldObject, newObject in
                newObject["myPropertyMk3"] = oldObject["myPropertyMk2"]
            })
        } 
        NSLog("Migration complete.")
    }
}

当我是DB的第2版时,这个方法工作得很好(显然没有oldSchemaVersion < 3块),但是当我介绍第3版时,我开始遇到问题,因为它不识别oldSchemaVersion < 2块中的oldSchemaVersion。如果我将它更改为newObject"myPropertyMk3",它就会工作得很好。

通过阅读RLMMigration代码,这是非常有意义的,因为我们使用旧的schme和新方案,但基于realm.io上的文档,我认为这是没有意义的。那样的话,我就不会指望它是计划了。

我有一个想法,通过简单地使用字典,然后最后将该字典应用到newObject,从而减少块内的迁移。

对于处理这一问题的领域的迁移策略有什么想法吗?这是在领域网站上提到的,但只是非常简短。

谢谢您:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-13 22:27:48

谢谢你的问题和报告你的问题。

通过阅读RLMMigration代码,这是非常有意义的,因为我们使用旧的schme和新方案,但基于realm.io上的文档,我认为这是没有意义的。那样的话,我就不会指望它是计划了。

正如您从RLMMigration中的代码中正确识别的那样,迁移不是无计划的。您提供的迁移闭包应该处理从过去的任何版本迁移到当前版本的。如果用户没有在中间更新应用程序,因此跳过了一个版本,则不可能,该领域可能会知道您的中间模式版本,因为模式会在运行时反映出来。您通常可以故意破坏与现有旧版本的向后兼容性,但是您需要注意将配置重置到定义的状态。

你说得对,这可以被更好地记录下来。我已经为此创造了一张内部罚单。

我有一个想法,通过简单地使用字典,然后最后将该字典应用到newObject中,从而减少块内的迁移。 对于处理这一问题的领域的迁移策略有什么想法吗?这是在领域网站上提到的,但只是非常简短。

根据您的方案和您拥有的数据量,您可以通过字典按对象在内存中对其进行重新组织,然后按照您的描述将其应用到newObject中。当前的API所作的假设相对较少,并且允许这样的方法。但是这样做对每个人都不是好事,例如,如果你有大量的相关对象列表的话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31366641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档