Как стать автором
Обновить

Комментарии 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, но и юзать модель верхнего уровня ниже по дереву.

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

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий