Комментарии 9
Феликс Ангелов против ))
В MVVM из мира WPF есть интересная проверка правильности работы связки MVVM: берётся ViewModel и полностью стирается (остаётся пустой класс), проект собирается и спокойно работает (просто нет реакции от биндингов). Не думаю что ваша реализация пройдёт эту проверку...
Второй момент, в MVVM есть биндинги (у вас даже на схеме они показаны), они имеют режим привязки (OneWay, TwoWay и тд.), у вас в примере я их не наблюдаю.
Также не будем забывать что в MVVM есть ещё команды, без которых не было бы реакции со стороны View, где они у вас?
Как по мне, в вашем примере и близко нет MVVM.
В данном примере, я и не пытался реализовать WPF на Flutter, а лишь концепцию MVVM подручными средствами.
Да нет всех элементов полноценной MVVM, но есть основные. Команды есть это методы вызываемые из view, которые находятся во viewModel : добавление, удаление, переключение.
Реализация простая, можно сказать упрощенная - для новичков, которая позволяет сделать более удобное управление состоянием виджетов
Основную проблему которою MVVM решает это полное разделение View и Model посредством ViewModel. В вашем примере мы из View можем добраться до Model напрямую и изменить её, например:
onPressed: () {
_viewModel.state.items.add(ToDoItem(...));
_viewModel.notifyListeners();
}
Да, согласен реализация простая, настолько, что это нельзя назвать MVVM.
И ещё вопрос на подумать: как связанно "управление состоянием" с архитектурным паттерном? И почему у вас смешалось ui логика с бизнес логикой?
Возможно я как то не правильно выразился но state это не модель, это состояние виджета в котором мы храним список, модель это бизнес логика реализацию которой я в данном примере опустил, это может быть что угодно, от хранения в бд, до внешнего сервиса, по сути тут реализованы view и viewModel
И объявлен класс модели ToDoItem
Предполагается что мы будем в момент инициализации виджета дёргать во вьюмодел нужный нам репозиторий и получать данные для отображения, а при выполнении команд сохранять изменения.
Рад что кто-то поднял вопрос MVVM на флаттере.
При этом хотелось бы без провайдера и подобных оберток.
И что-то посложнее - связка с БД, вложенные данные.
К примеру если у вас TODO лист с подзадачами, которые берутся из разных таблиц. Т.е. это уже будет два вида сущностей зависимых друг от друга. Операции CRUD и т.п.
Provider тут очень удобен, в целом не только ради проброса зависимости в View, но и юзать модель верхнего уровня ниже по дереву.
Кстати спасибо за идею, думаю осветить в следующей статье, как раз работу с бд, имеется определенный опыт, вот думаю что новичкам он может оказаться полезен, набрался из разных статей. А вот идея с подзадачами, как раз сюда ложится.
Flutter. MVVM. Начало