Лучше ли MVVM использовать один репозиторий для нескольких Dao? - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь создать приложение для Android, используя шаблон проектирования MVVM. В настоящее время я создал 3 типа Dao (Dao1, Dao2, Dao3) для 3 различных типов PostTypes, используя Realm в качестве базы данных. Мои 3 Daos выглядят одинаково, но содержат Object с некоторыми идентичными переменными, но также и с множеством разных.

class Dao1(db: Realm) : Dao<PostType1>(db) {

    fun findAllAsync(): LiveData<RealmResults< PostType1 >> {
        return RealmResultsLiveData(where().findAllAsync())
    }

    fun findById(id: Int): LiveData< PostType1 >? {
        return RealmLiveData(where().equalTo("id", id).findFirst())
    }

    private fun where(): RealmQuery<CTDCastaway> {
        return db.where(PostType1::class.java)
    }
}

Я пытаюсь выяснить, должен ли я создавать репозиторий для каждого Дао или 1, чтобы управлять ими всеми.

class PostRepositary private constructor(val postsDao1: Dao1?){
    fun getDao1Posts() = postsDao1?.findAllAsync()
    fun getDao1PostById(entityId: Int) = postsDao1?.getById(entityId)

    companion object{
        @Volatile private var instance:PostRepositary? = null
        fun getWildlifeInstance(postsDao1: Dao1) =
            instance ?: synchronized(this){
                instance ?: PostRepositary(postsDao1).also { 
                instance = it 
             }
        }
    }
}

Так я должен создать 1 репозиторий для каждого из моих типов постов или 1 репозиторий для всех 3 типов постов, учитывая, что они имеют некоторые общие свойства?

И как мне создать единый репозиторий для нескольких Daos?

Будем благодарны за любые ссылки на документацию, связанную с этим.

1 Ответ

1 голос
/ 22 мая 2019

пример двух daos один репозиторий

public class CardRepositoryDummy {

private final CardDao cardDao;
private final UserDao userDao;
private LiveData<List<Card>> cardListLiveData;
private DbHelper db;
private int keystage;
private static final String TAG = "CardRepo";

public CardRepositoryDummy(Application application) {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(application);
    keystage = sharedPreferences.getInt(Constants.SHARED_PREF_CARD_KEYSTAGE,0);
    db = DatabaseBuilder.getDatabase(application);
    cardDao = db.cardDaoLive();
    userDao = db.userDao();
}

public CardRepositoryDummy(Context application) {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(application);
    keystage = sharedPreferences.getInt(Constants.SHARED_PREF_CARD_KEYSTAGE,0);
    db = DatabaseBuilder.getDatabase(application);
    cardDao = db.cardDaoLive();
    userDao = db.userDao();
}
...