
Комментарии 3
Ваша ошибка изначально в том что Вы "повелись" за маркетингом ибо Bloc захватил умы флаттеристов. Но по сути он не имеет ничего общего с логикой а подменяет ее. Логика это способ мышления А Bloc подменяет его "классовой сущностью". Кирпич не являетcя логикой он инструмент логического потока. С течением времени Вы сами к этому пришли И это говорит о том что Bloc не лучшее решение в больших проектах
Хотите "чистой архитектуры" - возьмите за правило никогда не писать во flutter коде ничего что не рисует картинку. Вообще ничего. Все что хоть что-то считает - отдельная библиотека на чистом dart.
Это правило для себя я вывел на первой приложуньке.
На второй правило дополнилось - все что считает хоть что-то обязано всегда инициироваться с Isolate.spawn(). Ничего считающего, получающего из сети, и вообще делающее хоть что-то не рисующее не может быть в основном изоляте с рендерингом. Основной изолят должен только получать что-то от других и соответсвенно реагировать на эти сообщения.
Я не особый сторонник "чистой архитектуры" но с этими правилам что-то подобное получается само по себе.
Она делит приложения на слои:
presentation(UI),domain(бизнес-логика) иdata(слой данных).
В жёлтой книжке такого не написано, это уже народное творчество :). Роберт Мартин нам сказал, что лепите сколько угодно слоёв, пока зависимости в православную сторону смотрят.
<toxic>
event handlers в блоке превращаются в чистые функции
Когда вызов функции тождественен результату её выполнения - это чистая функция. Всё остальное - не очень. В вашем примере почти чистые, осталось только эмиты убрать :)
Можно использовать любой контейнер DI или вручную передавать сервисы и блоки в конструктор use‑case, без необходимости прокидывать их в блок. Это уменьшает связанность ...
А зачем блоки прокидывать в блок? И где тут меньше связанности, чем было, если просто стало на сущность больше?
BLoC остаётся стейт‑менеджером, не выполняя ничего
Согласен, приведённый пример кода прекрасно бы вписался по адресу https://refactoring.guru/smells/middle-man
Обсудим внизу статьи — чем больше реальных примеров, тем полезнее для сообщества.
Автор привёл ровно ноль реальных примеров, прежде чем завершить статью этим утверждением.
</toxic>
Из того, что импонирует в подходе, это наличие места в структуре для кросс-функционального взаимодействия (между блоками). Хоть и непонятно, кто конкретно этими юзкейсами будет call() делать.
Вынесение бизнес‑логики из BLoC в use‑cases: прагматичный взгляд на архитектуру Flutter