Android, я использую ViewModel для выполнения вставки или обновления? - PullRequest
0 голосов
/ 21 ноября 2018

Я понимаю, что ViewModel в компоненте Architecture предназначен для хранения и управления данными, поэтому они не будут потеряны при изменениях конфигурации.

Например, моя деятельность не имеет ничего общего с LiveData или использованием хранилища данных.Должен ли я пройти через ViewModel?или непосредственно создать экземпляр класса Repo и вызвать метод вставки?Я надеюсь, что имеет смысл

Пример моего использования ViewModel

public class MainViewModel extends AndroidViewModel {
    private DataRepo dataRepo;
    private LiveData<List<Group>> groupList;
    private LiveData<List<Bill>> billList;

    public MainViewModel(Application application) {
        super(application);
        dataRepo = new DataRepo(this.getApplication));
        groupList = dataRepo.getGroup();
        billList = dataRepo.getBill();
    }

    public LiveData<List<Group>> getGroupList() {
        return groupList:
    }

    public LiveData<List<Bill>> getBillList() {
        return billList:
    }

    public void insertGroupAndMember(Group group) {
        dataRepo.insertGroupAndMember(group);
    }

    public void insertBills(List<Bill> bills) {
        dataRepo.insertBills(bills);
    }

    public List<Member> getMemberList(Group group) {
        return dataRepo.getMembers(group);
    }
}

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Я думаю, что вы хотите использовать ViewModel, чтобы сохранить ваш контроллер пользовательского интерфейса как можно более чистым.Ваша viewmodel должна вызвать репо для выполнения простых операций CRUD.См. Ниже фрагмент из документации:

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

0 голосов
/ 21 ноября 2018

Вот несколько моментов, которые я бы посоветовал вам рассмотреть:

  • MVVM как образец имеет свои корни еще в 2000-м, например, вот статья Мартина Фаулера о концепции, и в 2005 году Джон Госсман объявил образец в своем блоге.Да, это решает проблему с вращением в реализации шаблона Android, но эта проблема может быть решена без него.MVVM действительно необходим для отделения состояния представления от представлений, которые видны конечному пользователю.Как говорит Вики -

Модель представления является абстракцией представления, представляющего открытые свойства и команды.Вместо контроллера шаблона MVC или предъявителя шаблона MVP в MVVM есть механизм связывания, который автоматизирует связь между представлением и его связанными свойствами в модели представления.Модель представления была описана как состояние данных в модели.

Итак, в первую очередь это (как и все другие архитектурные шаблоны GUI в их корне) об абстракции между view и domain частей приложения, так что они могут варьироваться независимо, и последующие изменения в системе будут дешевыми.

  • Создание объектов домена впросмотр области действия и их последующее использование представлением приводит к жесткой связи между представлением и объектами домена, что является плохой характеристикой любой системы.Кроме того, это еще одна причина для изменения внутренних элементов представления, потому что, если логика построения объекта домена изменяется, представление тоже придется изменить.

Если ViewModel для вас излишне (как яМожно видеть, что его преимущества не важны для вас в данном конкретном случае, потому что пользовательский интерфейс не очень сложен, а его состояние облегчено), рассмотрите возможность использования менее тяжелой абстракции, такой как MVP.Таким образом, вы сможете сохранить абстракцию между представлением и моделью в вашем приложении (без нежелательной связи), и вам не придется поддерживать код, который вам не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...