Flutter: следует ли использовать класс BloC для каждой страницы (UI / View)?

Я изучаю и разрабатываю приложение для флаттера как разработчик Android.

Я не знаком с флаттером, дротиком и шаблоном архитектуры BloC. В любом случае, я применяю шаблон BloC в своем приложении флаттера.

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

Мое игрушечное приложение - это приложение Todo.

Итак, у меня есть очень простые функции, и я определил BloC как:

  • Создать задачу> CreateTodoBloc
  • Обновить задачу> UpdateTodoBloc
  • Получить задачи> GetTodosBloc
  • Удалить задачу> DeleteTodoBloc

В моем домашнем пользовательском интерфейсе / представлении отображается список задач, который можно обновить, когда пользователь выполнит задание.

В этом случае домашний UI / View должен иметь два BloC: GetTodosBloc и UpdateTodoBloc.

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

Но проблема в том, что список дел не меняется! В моем домашнем пользовательском интерфейсе / представлении список задач отображается по-разному в зависимости от полного статуса задачи.

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

Тогда в Home UI / View будет только один объект блока: «HomeBloc».

И «HomeBloc» может отображать пользовательский интерфейс и обновлять задачу.

So...

Я хочу услышать мнение других разработчиков и узнать, есть ли еще одна лучшая практика.


person yoonhok    schedule 26.03.2019    source источник
comment
Блок - олдскульный Flutter. В наши дни все используют поставщика пакетов.   -  person Ted Henry    schedule 10.02.2020


Ответы (1)


Надеюсь, вы все еще работаете над проектами Flutter после этого долгого времени.

Мне очень нравится ваш образ мышления и реализация чистой архитектуры во Flutter.

В последнее время я использую принципы чистой архитектуры дяди Боба, и это удивительно, один из пяти принципов, которыми он владеет Single Responsibility Principle, и я честно думаю о BLoC как о способе управления вашим состоянием ТОЛЬКО то же самое, что я думал о ViewModel, если вы знаете об этом в Google AAC (компоненты архитектуры Android), поэтому на самом деле они не должны выполнять какие-либо логические операции внутри него.

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

Я только что создал тестовое приложение, реализующее принципы чистой архитектуры, и хотел бы получить ваши отзывы о нем. Вы можете получить доступ к репо со страницы здесь.

person Taha Malas    schedule 09.02.2020
comment
Это определенно правда, это много кода и занимает много времени, особенно если вы делаете модульные тесты, как в репо, но я также считаю, что это здорово для огромных приложений и масштабируемых, потому что эта архитектура обеспечивает расширяемость вашего приложения. - person Taha Malas; 10.02.2020
comment
Я искренне рекомендую вам посмотреть это видео Роберта Мартина, чтобы убедиться в его преимуществах https://www.youtube.com/watch?v=2dKZ-dWaCiU - person Taha Malas; 10.02.2020
comment
это много кода ... Я считаю, что это замечательно для огромных приложений. Что ж, если огромные приложения - ваша цель, похоже, что многословный стиль программирования поможет вам достичь этой цели быстрее! ???? - person Ted Henry; 10.02.2020
comment
18:42 в выступление Мартина и, наконец, поговорим об архитектуре. Если многословный стиль презентации этого парня является каким-либо признаком его стиля программирования, то да, он, должно быть, пишет огромные приложения. - person Ted Henry; 10.02.2020
comment
Вы просто цитируете несвязанные части комментария и используете их, чтобы даже не подчеркнуть смысла. Я более чем счастлив обсудить с вами плюсы и минусы этого подхода. Прежде всего, разделение проблем, каждый класс имеет только одну и одну цель, что значительно упростит навигацию внутри файлов вашего проекта, поэтому, как я сказал в исходном ответе, с моей точки зрения, BLoC несет ответственность только для управления государством, и именно для этого я его использую. - person Taha Malas; 10.02.2020
comment
Во-вторых, как вы видели в репозитории, если вы углубились в него, ядро ​​приложения - это уровень домена (варианты использования / интерактивные элементы), которые полностью отделены от фреймворка, с которым мы работаем, поэтому, если мы решите когда-нибудь перейти на Angular dart, уровень домена останется прежним, изменения будут внесены в уровень представления (часть пользовательского интерфейса приложения) и уровень данных (откуда мы получаем наши данные). - person Taha Malas; 10.02.2020
comment
Наконец, уровень данных: если мы когда-либо решим изменить способ выполнения запросов API из Dio в http или любую другую библиотеку, единственное, что будет изменено, - это реализация удаленных источников данных, потому что контракт, через который мы установить основные роли данных, которые мы хотим получать и получать из приложения. Наконец, я никого не убеждаю следовать этому подходу. Я рассказываю вам о своем опыте и о том, что многие крупные компании следуют и требуют, чтобы люди работали таким образом. Я всегда готов ответить на любой вопрос или обсудить - person Taha Malas; 10.02.2020
comment
Да, я также изолирую модель, процедуры локального хранилища и процедуры удаленного хранилища! Как сбалансировать объемную архитектуру с помощью читаемого, краткого, прямого кода - это вопрос суждения. Никакие два человека никогда не судят об этом одинаково. - person Ted Henry; 11.02.2020