169 похожих чатов

66 ответов

84 просмотра

явно не библиотека с сервис локатором)

скоупы, диай контейнер)

Sergio-Molchanovsky Автор вопроса

Ну нету во Флаттере нормального DI. Не прижилось.

Sergio Molchanovsky
Ну нету во Флаттере нормального DI. Не прижилось.

как на это посмотреть. решение есть, но большинство не использует

Alina
скоупы, диай контейнер)

а кто мешает использовать get_it как DI?

Jorik Fat
а кто мешает использовать get_it как DI?

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

Alina
просто смущает сильно его синглетон, сейчас думаю ...

если смущает - не используйте синглтон. В чем проблема?

а в чем проблема одного инстанта?

Alina
а в чем проблема одного инстанта?

захламление кода и усложнение чтения

Alina
а в чем проблема одного инстанта?

а в чем его преимущество?

Jorik Fat
а в чем его преимущество?

если брать опять же скоуп + диай контейнер, то... передадим один раз в вверху, а потом снизу будет обращаться Dependencies.of(context).something Dependencies.of(context).somethingElse

Alina
если брать опять же скоуп + диай контейнер, то... ...

так сервис локаторы умеют поддерживать скоупы

Alina
если брать опять же скоуп + диай контейнер, то... ...

там, где Вы создаете эти зависимости просто откройте скоуп, положите туда зависимости, и берите ниже по дереву

Jorik Fat
так сервис локаторы умеют поддерживать скоупы

Я про то, что используя тот подход, о котором я написала выше мы сохраняем в flutter-овском сервис локаторе (context) лишь одну зависимость, её менеджить максимально просто, когда в getIt... getIt<IDKWTF>() getIt<AnotherIDKWRF>()... трудно, труднее этим управлять.

Alina
если брать опять же скоуп + диай контейнер, то... ...

разница между DI и SL лишь в том, что в DI закрытием всех зависимостей и скоупа занимается VM, а в SL нужно делать это вручную

Jorik Fat
не "трудно", а "не привычно"

так подход сказанный мной проще, а потенциальных минусов нет

Alina
так подход сказанный мной проще, а потенциальных м...

потенциальный минус - захламление кода

бесконечная проброска одного и того же аргумента всем и всегда

Jorik Fat
бесконечная проброска одного и того же аргумента в...

а getIt с синглетоном, который позволяет получить везде и всегда - ок?

Jorik Fat
бесконечная проброска одного и того же аргумента в...

я не поняла, что вы имели ввиду. какая бесконечная проброска?

Alina
я не поняла, что вы имели ввиду. какая бесконечная...

передавать GetIt как параметр во все дочерние виджеты

Sergio-Molchanovsky Автор вопроса
Alina
если брать опять же скоуп + диай контейнер, то... ...

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

Sergio Molchanovsky
Это максимально кривой способ — зашивая инстансы н...

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

Alina
Но вот. Тут уже вопрос о профите и очевидном недос...

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

Alina
И как и говорила выше, потенциальному начинающему ...

Тут нужно определить о чём идёт речь "о том как должно быть" или "о том как это делается"

Jorik Fat
Тут нужно определить о чём идёт речь "о том как до...

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

Alina
если брать опять же скоуп + диай контейнер, то... ...

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

Ivan Galkin
Чел, в это и смысл контекста)))

И не только в контексте флаттера)

Ivan Galkin
Чел, в это и смысл контекста)))

Подмена зависимостей в контексте может привести к резкому ребилду и ререндеру всего приложения. Использование сервис локатора поможет этого избежать. Пример - локализация. Смена региона перебилдит все приложение. А если нам нужно заменить один репозиторий или сервис это не очень нужно

Sergey Mogilnikov
Подмена зависимостей в контексте может привести к ...

Что мешает оверрайднуть у инхеритеда условие на ребилд?

Sergey Mogilnikov
Подмена зависимостей в контексте может привести к ...

И не все приложение, а только как раз таки КОНТЕКСТНЫЕ зависимые виджеты

Ничего не мешает, это вопрос удобства и вкуса. Я изучал как работают inherited и мне кажется удобным использовать Get.i<T>() нежели dependency.of(context) в большинстве случаев. Да и не все вызовы имеют доступ к контексту

Sergey Mogilnikov
Ничего не мешает, это вопрос удобства и вкуса. Я и...

Это делается для понимания что откуда и куда И как можно не иметь доступ к контексту ,когда ты что-то рисуешь исходя из контекста

Sergey Mogilnikov
Ничего не мешает, это вопрос удобства и вкуса. Я и...

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

Alex Wow
Это делается для понимания что откуда и куда И ка...

Вызовы функций верхнего уровня части библиотек, например firebase_messaging, не имеют доступа к контексту

Sergey Mogilnikov
Вызовы функций верхнего уровня части библиотек, на...

Но насчёт того чтобы использовать гетит Это нужно чтобы проект в помойку не превращался * когда работаешь не один

Ivan Galkin
И зачем тебе здесь контекст?

Доступ к навигации при обработке информации из пуш уведомления, к примеру

Sergey Mogilnikov
Доступ к навигации при обработке информации из пуш...

BloC и тот же MobX с хранением текущей подписки на мессаги не?

Ivan Galkin
BloC и тот же MobX с хранением текущей подписки на...

Обработка нажатия на пуш происходит в глобальном методе onReceive насколько я помню, и вызовы из фона тоже

Sergio-Molchanovsky Автор вопроса
Alina
Для чего это? Для тестов?

1. Для тестов. Вместо Something() подставить MockSomething(). 2. Например, в вебе у тебя одна реализация базы данных, на мобилке другая.

Sergio-Molchanovsky Автор вопроса

А ещё ты жестко нарушаешь 2-й принцип SOLID. Классы должны быть закрыты для модификации — ты модифицируешь класс каждый раз, когда тебе нужно добавить зависимость.

Sergio Molchanovsky
А ещё ты жестко нарушаешь 2-й принцип SOLID. Класс...

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

Sergio-Molchanovsky Автор вопроса
Alina
2-ой принцип не подходит в данном контексте, по-мо...

Добавлять записи в мапу, и расширять класс новыми членами — не одно и то же.

Sergio Molchanovsky
Добавлять записи в мапу, и расширять класс новыми ...

Это одно и тоже. В чем разница того, что вы измените в getIt зависимость на какую-нибудь другую (измените логику исполнения сущностей, которые зависят от этой зависимости) что я изменю в контейнере... (измените логику исполнения сущностей, которые зависят от этой зависимости) ?

Sergio-Molchanovsky Автор вопроса
Alina
Это одно и тоже. В чем разница того, что вы измени...

Я не знаю, как у тебя реализован контейнер, но предполагаю, что там статические не финальные поля. Тогда у тебя не иммутабельный класс.

а чем это отличается от: IDKWTF.of(context); AnotherIDSWRF.of(context); ?

Alina
Я про то, что используя тот подход, о котором я на...

что Вы подразумеваете под "менеджерить"? зарегистрировать фабрику? а зачем ее менеджерить?

Jorik Fat
что Вы подразумеваете под "менеджерить"? зарегистр...

To manage идём от английского, что оно может означать)

Jorik Fat
а чем это отличается от: IDKWTF.of(context); Anoth...

Двумя разными типовыми инстансами и?)

Alina
To manage идём от английского, что оно может означ...

так не надо их никак менеджерить. Их либо объявлять, либо удалять

Alina
To manage идём от английского, что оно может означ...

оптимизировать менеджмент зависимостей - это решать задачу которой нет

Jorik Fat
оптимизировать менеджмент зависимостей - это решат...

Хорошо, нет так нет) И минусов ни у гетита, ни у сервис локатора нет

Похожие вопросы

Обсуждают сегодня

#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
У меня вопрос попроще, почти нубский: нужно заставить сайт эво 1.4.34 перевести с PHP 7.4 на 8.2. Понятное дело, что дополнения обновить-проверить, а с основной системой как ...
Вячеслав Кузьменко
5
Карта сайта