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

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

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

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

47 ответов

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

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

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Карта сайта