Я немного знаю об Android архитектуре MVVM, и мне нужно создать много файлов.
Итак, я создал несколько интерфейсов и родительских классов, чтобы упростить задачу.
Проще говоря, мне лень создавать и записывать все эти файлы с одинаковым типом кода: D
Вот моя структура,
Файл модели
@Entity(tableName = "some_model_tab")
public class StudentModel {
@NonNull
@PrimaryKey
private String id;
private String Name;
public StudentModel(String id, String name) {
this.id = id;
this.name = name;
}
Getters and Setters....
Класс интерфейса для хранения базовых операций c db
public interface BasicDbOperations<Model> {
void insert (Model model);
void update(Model model);
void delete(Model model);
LiveData<List<Model>> getAllItems();
}
Дао
@Dao
public interface StudentModelDao extends BasicDbOperations<StudentModel>{
@Override
@Insert
void insert(StudentModel a);
@Override
@Update
void update(StudentModel a);
@Override
@Delete
void delete(StudentModel a);
@Override
@Query("select * from student_model_tab")
LiveData<List<StudentModel>> getAllItems();
}
Родительский класс файлов репозитория
public class DbRepository<Dao extends BasicDbOperations, Model> implements BasicDbOperations<Model> {
private Dao dao;
private LiveData<List<Model>> allItems;
public DbRepository(Dao dao) {
this.dao = dao;
this.allItems = dao.getAllItems();
}
@Override
public void insert(final Model model) {
Database.databaseWriteExecutor.execute(new Runnable() {
@Override
public void run() {
dao.insert(model);
}
});
}
@Override
public void update(final Model model) {
Database.databaseWriteExecutor.execute(new Runnable() {
@Override
public void run() {
dao.update(model);
}
});
}
@Override
public void delete(final Model model) {
Database.databaseWriteExecutor.execute(new Runnable() {
@Override
public void run() {
dao.delete(model);
}
});
}
@Override
public LiveData<List<Model>> getAllItems() {
return this.allItems;
}
}
Репо
public class StudentModelRepo extends DbRepository<StudentModelDao, StudentModel> {
public StudentModelRepo(Application application) {
super(Database.getInstance(application).studentModelDao());
}
}
Родительский класс файлов ViewModel
public class DbViewModel<Repo extends BasicDbOperations, Model> extends AndroidViewModel implements BasicDbOperations<Model> {
private Repo repo;
private LiveData<List<Model>> allItems;
public DbViewModel(Application application, Repo repo) {
super(application);
this.repo = repo;
this.allItems = repo.getAllItems();
}
@Override
public void insert(Model model) {
this.repo.insert(model);
}
@Override
public void update(Model model) {
this.repo.update(model);
}
@Override
public void delete(Model model) {
this.repo.delete(model);
}
@Override
public LiveData<List<Model>> getAllItems() {
return this.allItems;
}
}
Наконец, ViewModel
public class StudentModelViewModel extends DbViewModel<StudentModelRepo, StudentModel> {
public StudentModelViewModel(Application application) {
super(application, new StudentModelRepo(application));
}
}
Таким образом я могу сэкономить массу времени, создавая коды того же типа.
Это сборка и запуск без каких-либо ошибок в моем приложении, но если честно Я не проверял, без проблем хранятся и извлекаются данные. Приложение все еще находится в стадии разработки.
Я слышал о Dagger, но не очень хорошо с ним знаком. Итак, я создал этот интерфейс и родительские классы в соответствии со структурой моей базы данных.
Но правильно ли это? Я имею в виду производительность или время выполнения, а может быть, это не go с Android MVVM Core Architecture
Заранее спасибо :)