Как стать автором
Обновить

Комментарии 5

Из статьи так и не понял, какое преимущество у runtime фреймворков перед compile time? И настолько ли оно велико у того же Kodein, чтоб прям заморачиваться с deploy time подходом?

Я бы сказал, что главное преимущество — простота использования. Я думаю, что возьми разработчика, который не работал с DI и дай документацию Dagger 2 и Kodein (или Koin) и засекай время, кто быстрее напишет работающий код.
Другой вопрос "на столько ли оно велико" — ответ стандартный it depends... Надо смотреть. Например, если вас абсолютно всё устраивает во фреймворке и единственная претензия это целостность графа и больше нет претензий — то deploy time подход вполне себе норм.

Если в простоту использования ещё добавить написание и споровождение тестов, то Dagger выигрывает

Koin и Kodein сервис локаторы, а не DI, в отличии от dagger. Если рассматривать dagger без различных "наворотов" типо dependent components, multibindings и т.д. то, возможно, dagger даже будет проще. Написал аннотацию Inject перед конструктором и фабрика для этого класса сгенерится в компаил тайме, можешь инжектить этот (и в этот) класс куда угодно. Добавил Singleton - вуаля, провайдится будет только единственный инстанс этого класса. Lazy/Provider и всякие другие удобные штуки добавляются просто из коробки так как dagger именно DI и следует JSP

имхо Koin и Kodein 100% вариант только для KMP, в остальных случаях я бы лично предпочел чистый dagger.

Koin и Kodein сервис локаторы, а не DI, в отличии от dagger

Фреймворки - это инструменты, и следовать они могут разным паттернам.

Главное, что надо понимать про DI и Сервис локатор, это принцип. Знает ли ваш класс, что он сам запрашивает откуда-то зависимость? Или эту зависимость ему провайдит (в конструктор) кто-то извне, и ваш класс даже не знает кто именно и как.

Позволяет ли Kodein и Koin управлять зависимостями так, что ваши классы не знают откуда они берут зависимость? Позволяет. Все дерево зависимостей, кроме Активити могут получать зависимости через конструктор. Значит DI "как подход" здесь можно применять.

и следует JSP

Наверное вы имели ввиду JSR-330? Да, Dagger его поддерживает. Как, кстати, и Kodein.

Главная разница у вас будет в том, что вы написали аннотацию Inject (в случае Dagger 2 или другого фреймворка, который поддерживает JSR-330) или вы написали by instance, который является делегатом и можно за уши притянуть, что вы же здесь запрашиваете зависимость, а не внедряете. Но с семантической точки зрения Котлин это позволяет написать максимально не привязанно к подходу Сервис локатора.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий