Перейти к содержимому
Источник

Опять про DI. Koin

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

Чисто как разраб разраба я понимаю автора. Делает какие-то прикольные штуки, KMP там, какие-то оптимизации, компиляторные плагины пишет, аннотации обрабатывает, с композом интегрирует. Работа мечты практически. Но как пользователь я и коин вообще на разных полюсах как будто. Потому что на кой фиг мне это всё вообще в библиотеке для DI? Ты сам придумал проблемы и сам их теперь героически решаешь.

Начиналось всё с того, что это была чуть более умная мапа классов к их экземплярам. Решала проблему сложности популярных на тот момент даггеров с одной стороны и невозможность вызова конструкторов у системных классов напрямую с другой стороны. Своих нюансов добавляла, типа того, что на всех собесах стали душнить вопросами про сервис-локаторы, но брала своей "простотой". С тех пор много воды утекло, появились всякие хилты, которые благодаря маркетинговой машине гугла и решению первой из проблем стали де факто стандартом для новичков. И я в сравнении с коином это даже одобряю, хоть они оба мне и не нравятся.

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

И нужен он всё также исключительно для того, чтобы достать зависимость "откуда-то", вообще не думая откуда. То есть для заметания под ковёр комплексности нашего графа зависимостей. Типа чтобы вот эти тупые разрабы (включая тебя) вообще голову не включали насколько всрато этот граф реализован. И это ещё и ценой рантайм безопасности. 😢

К даггеру и т.д. у меня ровно такие же претензии, если что. Но его рефакторить в разы проще если так уж сложилось и тебе достался такой проект. Синглтон синглтоном погоняет, все вьюмодели приложения перечисленные в одном файле, AppComponent на тысячи строк и всё в таком духе – это прям база.

А если копнуть глубже? На первую строчку документации Why Koin?Koin provides an easy and efficient way to incorporate dependency injection into any Kotlin application. Знаете что ещё даёт лёгкий и эффективный способ инжектить зависимости? Параметры в конструкторах. В голом котлине. Без всяких DSL и smart API. 🤭

Кстати, у нас на рабочем проекте Koin. Мы за два последних года ни разу туда не сунулись что-то серьёзно переделывать, потому что себе дороже. А если начинаешь проект с нуля и можешь себе позволить использовать конструкторы – нет ни одной причины тащить к себе этот кошмар. Заведи, блин, object со всеми зависимостями, и то лучше будет.