【问题标题】:How to support multiple RealmMigrations如何支持多个 RealmMigration
【发布时间】:2017-10-09 03:01:50
【问题描述】:

我们有多个相互独立且依赖于核心库的 android 库。核心库有CoreRealmManager,负责所有领域的操作。

应用程序 | --- 库模块-a | \-- 库模块-c | \-- 库核心 | | -x- lib-module-b | \-- 库核心 | | --- 库模块-c | \-- 库核心 | | --- 库模块-d | \-- 库核心 | | --- 库核心

这些库可以选择性地添加到应用程序中,并且应用程序也可以选择性地具有 RealmClasses。初始化时每个库在调用领域之前调用CoreRealmManager.addModule(Object additionalModule)

如果多个库和应用想要迁移,则在给定时间点。如何实现? Realm 仅支持 Single RealmMigration

@NonNull
static RealmConfiguration.Builder getConfigBundle() {
    RealmConfiguration.Builder builder = new RealmConfiguration.Builder();
    builder.schemaVersion(DB_VERSION)
            .modules(Realm.getDefaultModule(),
                    // Add additional library modules
                    getAdditionalModules());

    if (BuildConfig.DEBUG) {
        builder.deleteRealmIfMigrationNeeded();
    } else {
        // Set migration manager
        builder.migration(new MigrationManager()); // <-- Support multiple migration manager?

        byte[] secretKey = getSecretKey();
        if (secretKey != null) {
            builder.encryptionKey(secretKey);
        }
    }
    return builder;
}

【问题讨论】:

  • 在单个 MigrationManager 中做所有事情有什么问题?
  • 遵循复合设计模式,就像我在stackoverflow.com/a/45592632/2413303 中提到的多个initialData() 一样

标签: android realm android-library realm-migration


【解决方案1】:

您可以创建一个MigrationManager 来处理迁移列表,然后让每个子模块使用它注册自己的迁移。

类似

public class MigrationManager implements RealmMigration {

    List<RealmMigration> migrations = new ArrayList<>();

    public void addMigration(RealmMigration migration) {
        migrations.add(migration);
    }

    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        for (RealmMigration migration : migrations) {
            migration.migrate(realm, oldVersion, newVersion);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    相关资源
    最近更新 更多