Right DI implementation for Flutter #38
Replies: 1 comment
-
Да, нужно придумать некий рецепт, берущий лучшее от двух миров. Скоупы в этом слое могут опираться на жизненный цикл виджетов и доставлять зависимости стейт менеджерам. Причем в идеале при изменении зависимости нужно и пересоздавать зависимое от нее. class VehicleRepositoryImpl implements VehicleRepository {
final CollectionReference _collection;
VehicleRepositoryImpl({@required FirebaseFirestore firestore, @required User user})
: _collection = firestore.collection('users').doc(user.uid).collection('vehicles');
// В данном примере, любой метод репозитория [VehicleRepository]
// взаимодействующий с [CollectionReference] будет иметь доступ
// только к данным текущего пользователя [User]
} Естественно это касается не только пользователя, а вообще каждой зависимости и зависимости зависимости и зависимости зависимости от зависимости. Таким образом мы реактивно все связываем и при изменении А меняется B в свою очередь изменяя C которое зависит от B. Это как клеточки Excel. Сейчас смотрю в сторону
Как я понял, он на 95% перенесен из Kotlin и сейчас страдает только из за недостатка комьюнити дарта и наличия примеров. Естественно нужны будут и соответсвующие инструменты для управления этим слоем. |
Beta Was this translation helpful? Give feedback.
-
Ru description:
Бизнесовые зависимости (репозитории, клиенты) при использовании стейтменеджеров могут использоваться всего в 2ух вариантах:
Синглтоны, Сервайс локаторы и тп и тд. Со всеми вытекающими, на вроде глобальной доступности всего и вся, проблем с тестами, изменении зависимостей, отсутствие явного жизненного цикла и слабо предсказуемого поведения при масштабировании.
Provider/InheritedWidget, в общем контекст флаттера для доставки зависимостей. Да, тут уже будет жизненный цикл, область видимости и зависимости, но при этом репозитории будут находится в presentation слое и будут привязаны к UI фреймворку. В общем это противоречит чистой архитектуре.
Нужен некоторый подход с отделением зависимостей от контекста, но с сохранением возможности выделять скоупы и ЖЦ.
En comming soon.
Beta Was this translation helpful? Give feedback.
All reactions