Decompose — это многоплатформенная библиотека Kotlin для разбиения вашего кода на древовидные компоненты бизнес-логики с учетом жизненного цикла (также известные как BLoC) с функцией маршрутизации и подключаемым пользовательским интерфейсом (Jetpack/Multiplatform Compose, Android Views, SwiftUI, Kotlin/React и т. д.). .
Пожалуйста, посетите веб-сайт проекта для получения документации и API.
Если у вас возникнут вопросы или идеи – есть раздел «Обсуждения». Также добро пожаловать на канал Kotlin Slack — #decompose!
⚡⚡⚡ Где все звезды, проблемы, обсуждения, запросы на включение и т. д.?
Потратив 5 лет на работу над различными проектами для Badoo/Bumble, я отправляюсь в новое приключение. В рамках этого перехода меня попросили перенести этот репозиторий в учетную запись Badoo на GitHub.
Сейчас я продолжаю работу над этим проектом в качестве копии .
Не должно быть никаких критических изменений, связанных с этим переносом. Большинство внешних ссылок не должны быть битыми. Ссылка на репозиторий тоже та же: arkivanov/Decompose. Пожалуйста, сообщите о проблеме в этом репозитории, если вы считаете, что что-то сломано или не работает должным образом.
Вот на что больше всего повлиял трансфер:
Все звезды перенесены
Все вопросы и обсуждения также были переданы. Я сделаю все возможное, чтобы восполнить этот пробел здесь.
Все запросы на включение со всей историей комментариев также исчезли.
Я буду продолжать делать все возможное для этого проекта и для сообщества! Бизнес как обычно!
Дополнительные ресурсы:
Ветка на Hacker News
Зачем разлагать?
Decompose разбивает код на небольшие и независимые компоненты и организует их в деревья. Каждый родительский компонент знает только о своих непосредственных дочерних компонентах.
Decompose проводит четкие границы между кодом пользовательского интерфейса и кодом, не связанным с пользовательским интерфейсом, что дает следующие преимущества:
Лучшее разделение задач
Подключаемый пользовательский интерфейс для конкретной платформы (Compose, SwiftUI, Kotlin/React и т. д.)
Код бизнес-логики можно тестировать с помощью чистых мультиплатформенных модульных тестов.
Состояние навигации полностью открыто — подключайте любой пользовательский интерфейс, анимируйте по своему усмотрению, используя API вашей любимой платформы пользовательского интерфейса, или используйте предопределенный API.
Навигация — это чистая функция от старого состояния к новому — перемещайтесь без ограничений.
Правильное внедрение зависимостей (DI) и инверсия управления (IoC) через конструктор, включая, помимо прочего, типобезопасные аргументы.
Общая логика навигации
Компоненты с учетом жизненного цикла
Компоненты в заднем стеке не уничтожаются, они продолжают работать в фоновом режиме без пользовательского интерфейса.
Сохранение состояния (автоматически на Android, вручную на всех остальных целях через kotlinx-serialization )
Сохранение экземпляров (также известных как ViewModels) при изменении конфигурации (в основном полезно в Android)
Время мемов!
Настраивать
Пожалуйста, проверьте раздел «Установка» документации.
Поддерживаемые платформы
В целом Decompose поддерживает следующие цели: android , jvm , ios , watchos , tvos , macos , wasmJs , js . Однако некоторые модули поддерживают не все цели или поддержка зависит от версии Decompose. Подробности см. в документации по установке.
Обзор
Вот некоторые ключевые концепции библиотеки, более подробную информацию можно найти в документации.
Компонент — каждый компонент представляет собой часть логики со своим жизненным циклом, пользовательский интерфейс не является обязательным и подключается извне.
ComponentContext — каждый компонент имеет свой собственный [ComponentContext], который учитывает жизненный цикл компонентов и обеспечивает сохранение состояния, сохранение экземпляров (также известное как AndroidX ViewModel ) и обработку кнопки «Назад».
Child Stack — включает навигацию между дочерними компонентами, также поддерживается вложенная навигация.
Дочерний слот — позволяет одновременно использовать только один дочерний компонент или ни одного.
Дочерние страницы — список дочерних компонентов с одним выбранным компонентом (например, навигация в виде пейджера).
Универсальная навигация — предоставляет возможность создать собственную модель навигации, если ни одна из предопределенных моделей не соответствует вашим потребностям.
Жизненный цикл — предоставляет возможность прослушивать события жизненного цикла в компонентах.
StateKeeper — позволяет сохранить состояние или данные в компоненте при его уничтожении.
Пожалуйста, обратитесь к разделу «Быстрый старт» документации.
Образцы
Ознакомьтесь с разделом «Образцы» документации, чтобы получить полное описание каждого образца.
Шаблон
Ознакомьтесь с репозиторием шаблонов, который может быть использован для запуска вашего проекта.
Статьи
Decompose — эксперименты с компонентами Kotlin Multiplatform, учитывающими жизненный цикл, и навигацией.
Полностью кроссплатформенные приложения Kotlin (почти)
Комплексная тридцатистрочная навигация для Jetpack/Multiplatform Compose — если вы считаете Decompose многословным и предпочитаете что-то, созданное на основе Compose.
Серия «Компонентный подход» Артура Артикова
Часть 1. Борьба со сложностью в приложениях для Android
Часть 2. Реализация экранов с помощью библиотеки Decompose
Автор
Твиттер: @arkann1985
Если вам нравится этот проект, вы всегда можете ;-)