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

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

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

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

47 ответов

23 просмотра
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
Сори, возможно что-то упускаю, но почему бы в прим...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта