Android Просмотр архитектуры модели, правильно ли я делаю? - PullRequest
0 голосов
/ 06 мая 2020

Я немного знаю об 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

Заранее спасибо :)

...