BLoC расшифровывается как Business Logic Component. Шаблон реализации приложения с использованием BLoC называется шаблоном BLoC.

BLoC расшифровывается как Business Logic Component. Шаблон реализации приложения с использованием BLoC называется шаблоном BLoC. Его разработали Конг Хуэй, Паоло Соареш и Венфан Хуанг из Google.

BLoC - это способ централизовать вашу бизнес-логику в одном классе вашего приложения с помощью потоков, уменьшая проблемы обслуживания, которые могут возникнуть при использовании нескольких баз кода. Он был создан с целью позволить вам обмениваться кодом между приложениями Flutter (мобильное) и AngularDart (веб), но его можно использовать для ясности без обязательного совместного использования кода.

Шаблон BLoC был представлен на DartConf 2018 с живым кодированием Паоло и его можно увидеть на YouTube.

Некоторые примечания к выкройке:

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

  • Вам следует избегать использования одного BLoC в качестве параметра другого BLoC. Вместо этого подключите к соответствующим входам только необходимые выходы.

  • Большим приложениям требуется более одного BLoC. Хороший шаблон - использовать один компонент верхнего уровня для каждого экрана и по одному для каждого достаточно сложного виджета. Однако слишком много BLoC может стать громоздким. Кроме того, если в вашем приложении есть сотни и сотни наблюдаемых (потоков), это отрицательно сказывается на производительности. Другими словами: не переусердствуйте с разработкой своего приложения.

  • В иерархии BLoC верхний уровень (экранный) BLoC обычно отвечает за подключение потоков дочерних BLoC друг к другу.

  • BLoC совместим с серверной логикой. Шаблон не заставляет вас повторно реализовывать эту логику на клиенте (как это сделал бы Flux/Redux). Просто заверните логику на стороне сервера в компонент.

  • Один из недостатков, который проистекает из асинхронности потоков, заключается в том, что когда вы создаете StreamBuilder, он всегда сначала показывает initialData (потому что он доступен синхронно), и только затем он показывает первое событие, исходящее из Stream. Это может привести к отсутствию данных (один кадр). Есть способы предотвратить это - следите за обновлениями, чтобы увидеть более подробную статью. ps Если вы используете rxdart версии 0.19.0 и выше, вы можете просто использовать ValueObservable для выходных данных, и флэш-память async больше не является проблемой.

  • Внутренняя часть BLoC часто реализуется чисто функционально-реактивным способом (без вспомогательного состояния, чистые преобразования одного потока в другой). Но не чувствуйте себя обязанным делать это таким образом. Иногда проще и удобнее выразить бизнес-логику с помощью гибридного императивно-функционального подхода.

Ссылки: