编辑:Realm 0.88.0 has enabled the usage of custom methods,并且还可以实现你的领域对象的接口。但是我保留了我的存储库模式,这是以下原始答案。撰写本文时的最新版本是0.88.1。
我坚信data
对象应该只包含数据和逻辑应该分开。
public interface RealmRepository<T extends RealmObject, ID extends Serializable> {
T findOne(Realm realm, ID id);
RealmResults<T> findAll(Realm realm);
void insertOrUpdate(Realm realm, T t);
void insertOrUpdate(Realm realm, Collection<T> t);
T saveOrUpdate(Realm realm, T t);
RealmList<T> saveOrUpdate(Realm realm, RealmList<T> tList);
RealmQuery<T> query(Realm realm);
void delete(Realm realm, ID id);
void delete(Realm realm, T t);
void deleteAll(Realm realm, RealmResults<T> realmResults);
void deleteEveryObject(Realm realm);
long count(Realm realm);
}
而且
public abstract class BaseRealmRepositoryImpl<T extends RealmObject, ID extends Serializable>
implements RealmRepository<T, ID> {
protected Class<T> clazz;
public BaseRealmRepositoryImpl(Class<T> clazz) {
this.clazz = clazz;
}
@Override
public RealmResults<T> findAll(Realm realm) {
return query().findAll();
}
@Override
public void insertOrUpdate(Realm realm, T t) {
realm.insertOrUpdate(t);
}
@Override
public void insertOrUpdate(Realm realm, Collection<T> collection) {
realm.insertOrUpdate(collection);
}
@Override
public T saveOrUpdate(Realm realm, T t) {
return realm.copyToRealmOrUpdate(t);
}
@Override
public RealmList<T> saveOrUpdate(Realm realm, RealmList<T> list) {
RealmList<T> realmList = new RealmList<>();
for(T t : realm.copyToRealmOrUpdate(list)) {
realmList.add(t);
}
return realmList;
}
@Override
public RealmQuery<T> query(Realm realm) {
return realm.where(clazz);
}
@Override
public void deleteEveryObject(Realm realm) {
realm.delete(clazz);
}
@Override
public void delete(Realm realm, T t) {
t.deleteFromRealm();
}
@Override
public void deleteAll(Realm realm, RealmResults<T> realmResults) {
realmResults.deleteAllFromRealm();
}
@Override
public long count(Realm realm) {
return query().count();
}
}
而且
public abstract class StringRealmRepositoryImpl<T extends RealmObject>
extends BaseRealmRepositoryImpl<T, String>
implements RealmRepository<T, String> {
public StringRealmRepositoryImpl(Class<T> clazz) {
super(clazz);
}
@Override
public T findOne(Realm realm, String id) {
return query(realm).equalTo(getIdFieldName(), id).findFirst();
}
@Override
public void delete(Realm realm, String id) {
delete(realm, findOne(realm, id));
}
}
而且
public class TeacherRealm extends RealmObject {
@PrimaryKey
private String id;
//getter, setter, etc.
}
而且
public class TeacherRepositoryImpl
extends StringRealmRepositoryImpl<TeacherRealm>
implements TeacherRepository {
public TeacherRepositoryImpl() {
super(TeacherRealm.class);
}
}
和存储库是可扩展的。
为什么你不想将模型与在模型上执行操作的类分开?:confused: – Yaroslav
你的TeacherRealm类的静态方法怎么样?'public static RealmResults findGoodTeachers(Realm realm,int teacherAge)' –
beeender