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

Нужна помощь по clean+многомодульность. с DI как быть? DI в

каждую фичу добавлять или отдельный модуль юзать для DI?

У кого есть хорошая практика, чтобы по граблям не ходить, дайте совет

47 ответов

19 просмотров
Nick
screenshot

😂😂😂

Nick
screenshot

в самое сердце бьёшь

У тебя сколько проектов одновременно? Ты прям из одной крайности в другую прыгаеш

Пользователь-6107d Автор вопроса
Nick
screenshot

Ну я же писал, если 30 модулей это норма. Если 1000 это ад. Ты короче меня запомнил на всю оставшуюся жизнь я смотрю))

Пользователь-6107d Автор вопроса
ABI
Кому как )

Ну да, просто бывают такие проекты, что приходиться подстраиваться под них, иначе денушку не получишь)

Представь что у тебя каждая фича это aar который ты цепляшь к проекту через implement. В этом случае как ты сам на вопрос ответишь?

Пользователь-6107d Автор вопроса
Aleksey D.
пусть проекты под тебя подстраиваются

Тут заказчик нервный)) не получается

Пользователь-6107d Автор вопроса
ABI
Представь что у тебя каждая фича это aar который т...

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

Пользователь-6107d Автор вопроса
Пользователь-6107d Автор вопроса
ABI
Опять же. А нужен ли DI?

Щяс без DI разве clean где - то пишут? я не видел такого

Пользователь 6107d
Щяс без DI разве clean где - то пишут? я не видел ...

Я тоже пару месяцев назад задавался этим вопросом. Таки пишут. А ещё di ломает solid

Пользователь 6107d
понятно, а как тестят?

А кто не даёт все зависимости через конструктор провайдить?) Слои абсолютно не меняются

Vladislav Баженов
А как di ломает solid?

Самый банальный пример - есть интерфейс, есть две реализации, тебе нужно дать понять библиотеке, какую ты будешь реализацию пробрасывать. В даггере ты будешь использовать какой-то @Named или другой кволифаер, на зависимом конструкторе. Считай, ты неявно подарил прямую зависимость - ты не сможешь сюда дать другую реализацию

Vladislav Баженов
А как di ломает solid?

Вот тут как раз этот пример детально смотрят https://www.pragmaticobjects.com/chapters/007_di_containers.html

Roman Chumachenko
Самый банальный пример - есть интерфейс, есть две ...

ну эт проблема контейнера такие штуки можно в модуле спрятать

Aleksey D.
ну эт проблема контейнера такие штуки можно в моду...

Да, спринг даёт возможность, например, выносить это в XML. Только и он кривой и все используют аннотации. В статье, что я скинул, есть размышления и на эту тему. Не могу сказать, что мне нравиться идея самому писать код для группирования "матрёшек" с логикой, но di - не серебряная пуля

Aleksey D.
ну эт проблема контейнера такие штуки можно в моду...

На счёт прятать в модуле, предлагаешь сделать provide-метод, который будет получать named интерфейс и возвращать, как обычный?

Roman Chumachenko
А кто не даёт все зависимости через конструктор пр...

Провайдив через конструктор ты тоже используешь DI.

Konstantin Dovnar
Провайдив через конструктор ты тоже используешь DI...

Не обязательно, я могу руками туда сложить всё

Roman Chumachenko
Не обязательно, я могу руками туда сложить всё

class A(val dep: Dependency) fun main() { val dep = DependencyImpl() val a = A(dep) } Это всё ещё DI. Ты предоставляешь зависимости из вне.

Egor Sigolaev
Зачем? Смысл di теряется

Так о том и соль, что жить можно по клину и без di

Roman Chumachenko
Так о том и соль, что жить можно по клину и без di

Ну можно, удачи. Можно и не юзать ретрофит с окхттп)

Konstantin Dovnar
class A(val dep: Dependency) fun main() { val...

DI - это ещё и в поля инъекции, и в методы, да. Не верно выражаюсь наверное, можно писать по клину без di-библиотек

Egor Sigolaev
Ну можно, удачи. Можно и не юзать ретрофит с окхтт...

Так, не, давай по делу. Di-либы ломают солид, а писать самопальные штуки - это другое

Aleksey D.
да, вариант

Думал о чем-то подобном раньше, это не будет работать. Ты запросил конкретную реализацию, снял с нее эту пометку "конкретная реализация А" и отправил дальше. Опять же, не выйдет теперь другую реализацию подсунуть. Условно говоря, проблему под ковер запрятать, подальше от глаз

Egor Sigolaev
Ну можно, удачи. Можно и не юзать ретрофит с окхтт...

ну прям можно подумать что DI чисто для ретрофита замутили. как бы до DI ретрофит (и подобное) в синглтон загоняли и не парились... Опять же с точки зрения кода в маленьких проектах нафиг DI не нужен, если у тебя реально только один ретрофит + 2-3 фрагмента

ABI
ну прям можно подумать что DI чисто для ретрофита ...

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

Egor Sigolaev
Я писал вообщем про то, что можно отказаться от вс...

велосипеды - это святое ) их трогать низя

Roman Chumachenko
Думал о чем-то подобном раньше, это не будет работ...

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

Roman Chumachenko
Кстати, прикольно

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

Roman Chumachenko
А кто не даёт все зависимости через конструктор пр...

У нас в продакшн как раз такой подход и используется. DI-фреймворки слишком расслабляют и разрабы начинают их использовать направо и налево, без разбору, ломая структуру. Использование стандартных средств ООП, без монстрофреймворков, создает более строгую, SOLIDную и более простую структуру кода. Да и компилится такой проект быстрее.

Roman Chumachenko
Вот тут как раз этот пример детально смотрят https...

https://hmp3.ru/07zCVbZnG1MqDFWhYBX7hg_sergey-kapralov-di-containers-vs-objects.html Вот тут на русском.

Roman Chumachenko
Так, не, давай по делу. Di-либы ломают солид, а пи...

Простите можно подробней. Как именно они ломают солид?)

Ilya Nikolaev
Простите можно подробней. Как именно они ломают со...

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

Roman Chumachenko
Вот тут был пример. Штука именно в реализации, а н...

Сори, возможно что-то упускаю, но почему бы в примере из статьи не заинжектить фабрику, которая уже в рантайме будет решать какую из реализаций бинов отдавать?

Nikita Tipun
Сори, возможно что-то упускаю, но почему бы в прим...

Тоже вариант. В тестах мокать лишнее придется, а так - да. Ну и еще мое субьективное - хочется не фабрики везде носить за собой, а реальные зависимости)

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта