
Andrew
18.09.2018
13:56:07

Bogdan
18.09.2018
13:56:28

Sergey
18.09.2018
13:56:43
у них нет фактически IoC фрейма

Google

Sergey
18.09.2018
13:56:57
даже на больших проектах типа k8s

Andrew
18.09.2018
13:57:47

Руслан
18.09.2018
13:58:44
DI container и руками организованный DI?
Окей, т.е. Koin, Kodein, Spring, Guice, Dagger - DI Container
Создавать классы ручками через конструкторы или сеттеры - DI.
Неудобно писать DI Container. Может просто DIC?

Alexey
18.09.2018
13:59:08
дааа дик

Руслан
18.09.2018
13:59:18

Sergey
18.09.2018
13:59:26
Guice, Spring и тд это всего лишь DSL для контейнера, на выходе один хрен одинаковая штука выйдет что руками, что со спрингами

Andrey
18.09.2018
14:00:00

Andrew
18.09.2018
14:00:05

Sergey
18.09.2018
14:00:05
а со стороны кода уж тем более пофиг кто ему зависимости пропихивать будет

Руслан
18.09.2018
14:00:30
Например через ServiceApi

Andrey
18.09.2018
14:02:12
А хуже всего, если не падает, а как-то, из существующего говна и палок оно зависимости смогло собрать, но не те, которые ожидет программист.

Google

Руслан
18.09.2018
14:02:16

Andrey
18.09.2018
14:04:18

Руслан
18.09.2018
14:05:45

Alexey
18.09.2018
14:06:38
Ну вот добавилась зависимость в класс, и в случае ручного сбора у тебя упадёт на компиляции, в случае спринга когда то на рантайме

Руслан
18.09.2018
14:06:55

Sergey
18.09.2018
14:06:56
но в основном на любом запуске оно упадет в рантайме, на фрейме
если там нет lazy зависимостей
которые внезапно в проде упадут)

Alexey
18.09.2018
14:07:31

Quantum Harmonizer
18.09.2018
14:07:49

Sergey
18.09.2018
14:07:51

Alexey
18.09.2018
14:08:06

Igor
18.09.2018
14:08:08
так с любым IoC фреймом
Ну на ведре, используют код-ген (dagger2/toothpick) и в основном падает при компиляции.
Хотя имхо, лучше просто тестами покрыть.

Andrey
18.09.2018
14:08:12

Sergey
18.09.2018
14:08:16

Alexey
18.09.2018
14:08:19
У вас везде контейнеры
?

Andrey
18.09.2018
14:09:20

Sergey
18.09.2018
14:09:43
ну вообще, если у вас некое подобие микросервисной архитектуры, от фрейм для IoC вам вряд ли нужен будет и достаточно ручками все описывать

Google

Sergey
18.09.2018
14:10:10
а сотню зависимостей можно и ручками описать один раз как @eld0727 и предлагал мне когда-то

Руслан
18.09.2018
14:11:27
Нету никаких гарантий, что упадёт именно на запуске.
Если только что-то не lazy, а если lazy, то тебе и в ручном сборе не мешает упасть.
Да что там далеко ходить. Вот вы сделали модуль, который подключаете в runtime, а за зависимостями из вашего Manual DI нужно ходить через ServiceLoader (ну или предложите compile-time safe true fp way). Вот и все, все на рантайме, может упасть, как жить)

Andrey
18.09.2018
14:11:35
Ладно, всем удачи в этом чатике. Работа стоит.

Alexey
18.09.2018
14:11:36
Они не появляются все разом

Igor
18.09.2018
14:11:51

Sergey
18.09.2018
14:12:15

Руслан
18.09.2018
14:12:54
Если только что-то не lazy, а если lazy, то тебе и в ручном сборе не мешает упасть.
Да что там далеко ходить. Вот вы сделали модуль, который подключаете в runtime, а за зависимостями из вашего Manual DI нужно ходить через ServiceLoader (ну или предложите compile-time safe true fp way). Вот и все, все на рантайме, может упасть, как жить)
У нас, в JVM мире, даже загрузка классов происходит на рантайме, ClassLoader. И ничего, живем.

Sergey
18.09.2018
14:12:58
в общем я честно пытался koin/kodein заюзать, но как-то расстроился сильно

Quantum Harmonizer
18.09.2018
14:13:25

Sergey
18.09.2018
14:13:38
кровью интерпрайза пахнет

Руслан
18.09.2018
14:15:35
кровью интерпрайза пахнет
У тебя есть скомпиленный jar, который строит тебе из набора adoc файлов сайтик. И ты хочешь к нему подключить плагин, который когда видит [youtube=fsdfsd] вставляет на этом месте iframe. У тебя есть два пути - заставить всех пользователей ставить jdk и запускать idea, править код чтобы подключить плагин, или загружать зависимости на рантайме. Какой выберешь?
И вот сейчас всем хейтерам DI Container предлагаю написать компайл-тайм сейф код для этой задачи)

Sergey
18.09.2018
14:16:47
я не хейтер)) я сторонник YAGNI/KISS

Руслан
18.09.2018
14:17:05

Sergey
18.09.2018
14:17:11
?

Quantum Harmonizer
18.09.2018
14:17:57

Руслан
18.09.2018
14:18:39

Quantum Harmonizer
18.09.2018
14:19:27
Более того, можно подключить как compileOnly и даже написать new, просто оградить этот кусочек кода, чтобы не вызвать его, когда класса нет.

Руслан
18.09.2018
14:20:17

Google

Quantum Harmonizer
18.09.2018
14:21:13

Руслан
18.09.2018
14:22:50

Igor
18.09.2018
14:23:59
А что такое ObjectMapper?

Руслан
18.09.2018
14:24:10

Igor
18.09.2018
14:25:07
Чет сложно (я под андроид пишу). ObjectMapper это типа класс, который мапит одни VO в др VO (value-object)?

Руслан
18.09.2018
14:25:25
Я даже подскажу тебе первый шаг. У тебя есть вот таких два класса:
interface Plugin
interface PluginProvider {
fun get(): KClass<out Plugin>
}
и ты наверное в плагине сделаешь как-то так:
cat resources/META-INF/services/PluginProvider
my.pacakge.CoolPlugin
И при этом он сам зависимость, для тебя
Стандартная задача

Admin
ERROR: S client not available

Quantum Harmonizer
18.09.2018
14:26:34

Igor
18.09.2018
14:26:50

Quantum Harmonizer
18.09.2018
14:26:51

Руслан
18.09.2018
14:27:33

Quantum Harmonizer
18.09.2018
14:28:05
Превратить объект в пачку функций. Без зависимостей.
Передавать ObjectMapper в каждый метод, в котором он может понадобиться.

Александр
18.09.2018
14:28:37
Котлин коммунити потихоньку превращется в ДИ ИоК чат)

Руслан
18.09.2018
14:29:23

Mikhail
18.09.2018
14:29:42
самое забавное, что раньше когда я участвовал в DI срачах - они были про ServiceLocator vs DependencyInjectionContainer

Quantum Harmonizer
18.09.2018
14:29:59
Потому что мы-то внутри себя вполне можем дропнуть Jackson, а плагин ничего об этом не будет знать — а так это прописано явно.

Google

Руслан
18.09.2018
14:30:33

Quantum Harmonizer
18.09.2018
14:31:12
Потому что непонятно, откуда зависимостям браться.

Руслан
18.09.2018
14:32:57

Quantum Harmonizer
18.09.2018
14:33:24

Руслан
18.09.2018
14:33:48
Так я тебе и спрашиваю, как без этого мерзкого рефлекшена решить вот такую задачку
Рефлекшеном - изи, взял провайдер, получил KClass, вызвал конструктор в который из DI контейнера напихал зависимостей

Quantum Harmonizer
18.09.2018
14:35:29

Руслан
18.09.2018
14:35:40
Это я тебе говорю как в реальном мире решить задачу

dimiii
18.09.2018
14:36:00

Quantum Harmonizer
18.09.2018
14:36:12
> из DI контейнера
ну вот не знаю я ничего про ObjectMapper, у меня нет Jackson или он настроен не так, как нужно плагину

Руслан
18.09.2018
14:36:16
И тут рефлекшен, DI контейнер, все по худшим стандартам

Mikhail
18.09.2018
14:37:05

Quantum Harmonizer
18.09.2018
14:37:18

Руслан
18.09.2018
14:37:47
Руками собрал граф и всё
А как граф передать в динамический модуль? Это ж что ж, servise loader предлагаешь делать? Нужно же сделать DI!

Sergey
18.09.2018
14:39:05
немного не в тему, но вопрос - как вы держите swagger ui, один на все проекты, или в каждом проекте свой?

Mikhail
18.09.2018
14:39:53
я просто андроид-разработчик, мне твои сокращения и термины не очень понятны

Руслан
18.09.2018
14:41:29
Да, плагин реализует интерфейс Plugin (который мы сами написали), core модуль на рантайме загружает набор plugin модулей с реализацией интерфейса Plugin.

Andrey
18.09.2018
14:42:04

Руслан
18.09.2018
14:42:59