我的问题是如何组织代码。假设我有一个 User 类
public class User extends RealmObject {
@PrimaryKey
private String id;
@Required
private String name;
public User() { // per requirement of no args constructor
id = UUID.randomUUID().toString();
}
// Assume getter & setter below...
}
并且需要一个 Util 类来以异步方式处理保存,因为 RealmObjects 不能有除 getter/setter 之外的方法。
public class Util {
public static void save(User user, Realm realm) {
RealmAsyncTask transaction = realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealm(user); // <====== Argument needs to be declared final in parent method's argument!
}
}, null);
}
}
目的是将 save() 放在 Util 类中,以防止在整个代码库中传播类似的保存代码,这样每次我想要保存时,我都会这样调用它:
User u = new User();
u.setName("Uncle Sam");
Util.save(u, Realm.getDefaultInstance());
不确定这是否会影响性能,但我只是要保存所有字段,覆盖除唯一 id 字段之外的所有字段。
问题是我现在需要在 Util.save() 方法中将“user”参数设置为最终参数,这意味着我只能传入需要保存一次的对象。
有什么不同的方法来处理这个问题吗?也许有不同的模式?或者我认为这一切都是错误的,应该回到 SQLite?
最佳答案
为什么设置 public static void save(final User user, Realmrealm)
会出现问题?这只是意味着您无法将 user
变量重新分配给其他变量。
也就是说,当您将更新行为传播到整个代码库时,save()
方法的存在可能会成为潜在的代码异味。我建议改为研究诸如存储库模式( http://martinfowler.com/eaaCatalog/repository.html )之类的东西。
关于java - Realm 中持久数据的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35305164/