Decompose es una biblioteca multiplataforma de Kotlin para dividir su código en componentes de lógica empresarial con estructura de árbol y conscientes del ciclo de vida (también conocido como BLoC), con funcionalidad de enrutamiento y interfaz de usuario conectable (Jetpack/Multiplatform Compose, Android Views, SwiftUI, Kotlin/React, etc.) .
Consulte el sitio web del proyecto para obtener documentación y API.
Si tiene alguna pregunta o idea, está la sección de Discusiones. También bienvenido al canal Kotlin Slack: ¡#decompose!
⚡⚡⚡ ¿Dónde están todas las estrellas, problemas, discusiones, solicitudes de extracción, etc.?
Después de pasar 5 años trabajando en una variedad de proyectos para Badoo/Bumble, ahora me embarco en otra aventura. Como parte de esa transición, me pidieron que transfiriera este repositorio a una cuenta de Badoo GitHub.
Ahora continúo mi trabajo en este proyecto como copia .
No debería haber cambios importantes relacionados con esta transferencia. La mayoría de los enlaces externos no deberían romperse. El enlace del repositorio también es el mismo: arkivanov/Decompose. Presente un problema en este repositorio si cree que algo está roto o no funciona correctamente.
Esto es lo que más se ve afectado por la transferencia:
Todas las estrellas fueron transferidas.
Todos los temas y discusiones también fueron transferidos. Haré todo lo posible para llenar el vacío aquí.
Todas las solicitudes de extracción con todo el historial de comentarios también desaparecieron.
¡Continuaré haciendo todo lo posible por este proyecto y por la comunidad! ¡Negocios como siempre!
Recursos adicionales:
Un hilo en Hacker News
¿Por qué descomponerse?
Decompose divide el código en componentes pequeños e independientes y los organiza en árboles. Cada componente principal sólo conoce sus hijos inmediatos.
Decompose traza límites claros entre el código UI y el que no es UI, lo que brinda los siguientes beneficios:
Mejor separación de preocupaciones
Interfaz de usuario conectable específica de la plataforma (Compose, SwiftUI, Kotlin/React, etc.)
El código de lógica empresarial se puede probar con pruebas unitarias multiplataforma puras
El estado de navegación está completamente expuesto: conecte cualquier interfaz de usuario que desee, anime como desee utilizando la API de su marco de interfaz de usuario favorito o utilice una API predefinida.
La navegación es una función pura del estado antiguo al nuevo: navegar sin límites.
Inyección de dependencia (DI) e inversión de control (IoC) adecuadas a través del constructor, incluidos, entre otros, argumentos de tipo seguro.
Lógica de navegación compartida
Componentes conscientes del ciclo de vida
Los componentes en la pila de actividades no se destruyen, continúan funcionando en segundo plano sin interfaz de usuario.
Preservación del estado (automáticamente en Android, manualmente en todos los demás objetivos mediante kotlinx-serialization )
Retención de instancias (también conocidas como ViewModels) sobre cambios de configuración (principalmente útil en Android)
¡Hora de los memes!
Configuración
Consulte la sección Instalación de la documentación.
Plataformas compatibles
En general, Decompose admite los siguientes objetivos: android , jvm , ios , watchos , tvos , macos , wasmJs , js . Sin embargo, algunos módulos no admiten todos los objetivos o la compatibilidad depende de la versión de Decompose. Consulte los documentos de instalación para obtener más detalles.
Descripción general
A continuación se muestran algunos conceptos clave de la biblioteca; se pueden encontrar más detalles en la documentación.
Componente: cada componente representa una parte de la lógica con su propio ciclo de vida, la interfaz de usuario es opcional y está conectada externamente.
ComponentContext: cada componente tiene su propio [ComponentContext], lo que hace que los componentes tengan en cuenta el ciclo de vida y permite la preservación del estado, la retención de instancias (también conocida como AndroidX ViewModel ) y el manejo del botón Atrás.
Child Stack: permite la navegación entre componentes secundarios; también se admite la navegación anidada
Ranura secundaria: permite solo un componente secundario a la vez o ninguno
Páginas secundarias: una lista de componentes secundarios con un componente seleccionado (por ejemplo, navegación tipo buscapersonas)
Navegación genérica: proporciona una manera de crear su propio modelo de navegación personalizado, cuando ninguno de los modelos predefinidos se ajusta a sus necesidades.
Ciclo de vida: proporciona una manera de escuchar los eventos del ciclo de vida en los componentes.
StateKeeper: permite conservar el estado o los datos de un componente cuando se destruye
InstanceKeeper: conserva instancias en sus componentes (similar a AndroidX ViewModel )
BackPressedHandler: proporciona una manera de manejar e interceptar las pulsaciones del botón Atrás
Jerarquía de componentes
Jerarquía de interfaz de usuario conectable
Estructura de componentes típica
Inicio rápido
Consulte la sección Inicio rápido de los documentos.
Muestras
Consulte la sección Muestras de los documentos para obtener una descripción completa de cada muestra.
Plantilla
Consulte el repositorio de plantillas que puede usarse para iniciar un proyecto por usted.
Artículos
Decompose: experimentos con navegación y componentes conscientes del ciclo de vida de Kotlin Multiplatform
Una navegación completa de treinta líneas para Jetpack/Multiplatform Compose, si encuentra Decompose detallado y prefiere algo construido sobre Compose.
Serie "Enfoque basado en componentes" de Artur Artikov
Parte 1: Luchar contra la complejidad en las aplicaciones de Android
Parte 2: Implementación de pantallas con la biblioteca de descomposición