
Ручной DI в Kotlin Multiplatform: понравится и тебе, и твоему ИИ‑агенту
artem_khmelev 11 минут назад Ручной DI в Kotlin Multiplatform: понравится и тебе, и твоему ИИ‑агенту Средний 20 мин 291 Android * Kotlin * Разработка мобильных приложений * Туториал Из песочницы Дикие фреймворки и...
Anthropic — What company has the best second artificial intelligence model at the end of June?
Вот важная новость с фронта ИИ: artem_khmelev 11 минут назад Ручной DI в Kotlin Multiplatform: понравится и тебе, и твоему ИИ‑агенту Средний 20 мин 291 Android * Kotlin * Разработка мобильных приложений * Туториал Из песочницы Дикие фреймворки и ручной кодГраф зависимостей KMP‑приложения можно собрать обычным Kotlin‑кодом — без рефлексии, кодогенерации, аннотаций и DSL. Composition root и конструкторы, никакой магии. Звучит как шаг назад от зрелых DI‑фреймворков — пока не посмотришь, кому такая форма удобна: тебе, новому человеку в команде и твоему ИИ‑агенту.
Сам composition root — не изобретение и не что‑то про KMP. Термин популяризировал Марк Симан (Mark Seemann), автор книги «Dependency Injection», и описал его как единственную точку, где собирается весь граф объектов приложения (ploeh. Паттерн одинаково работает в.
Технические детали
NET, на бэкенде, в Python — в любом модульном приложении, которое собирает зависимости в одной точке входа. KMP добавляет к нему одну ось, специфичную для платформы: иерархию сорс‑сетов. О ней дальше — иерархия контейнеров повторяет иерархию сорс‑сетов, и место каждого компонента определяется тем, какой API виден его сорс‑сету.
Зачем вообще ручной DI, если есть зрелые фреймворки? Главная причина — наглядность. Граф зависимостей здесь — обычный код: видно, что и где создаётся, любую связь можно пройти через «go to definition» в IDE.
Никакой магии, никаких объектов «из воздуха» — то, что во фреймворке скрыто за аннотациями и кодогенерацией, лежит открытым текстом. Из наглядности вытекает остальное: нулевая стоимость входа (нет плагина, настройки сборки, версионных конфликтов), отладка обычным дебаггером по коду, низкий порог для нового человека в команде — ничего не нужно учить за пределами проекта, читается как любой Kotlin. Это не отказ от инструмента из принципа.
Отраслевые последствия
Фреймворк решает реальные проблемы, и на большом проекте он может окупиться. Но он же добавляет компилятор‑плагин или KSP, свой жизненный цикл сборки, свои правила и свою кривую обучения. Пока проблем, которые он решает, ещё нет, он остаётся аппаратом тяжелее задачи.
Дальше — как устроен ручной DI в Tether, KMP‑приложении для передачи файлов между устройствами (Android, iOS, Desktop), и где проходит граница, за которой фреймворк начинает себя окупать. Код в примерах синтетический: имена классов обобщены, чтобы показать форму паттерна, а не конкретную реализацию. Сами паттерны взяты из боевого кода.
Главная идея: composition rootComposition root — единственное место, где приложение собирает граф зависимостей. Это место принято называть контейнером. Контейнер единственный создаёт компоненты — все сущности графа, которыми владеет приложение: интеракторы, репозитории, источники данных — и раздаёт их всем, кому они нужны.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





