Decompose est une bibliothèque Kotlin multiplateforme permettant de décomposer votre code en composants de logique métier structurés en arborescence (alias BLoC), avec une fonctionnalité de routage et une interface utilisateur enfichable (Jetpack/Multiplatform Compose, Android Views, SwiftUI, Kotlin/React, etc.) .
Veuillez consulter le site Web du projet pour la documentation et les API.
Si vous avez des questions ou des idées, il y a la section Discussions. Bienvenue également sur la chaîne Kotlin Slack – #decompose !
⚡⚡⚡ Où sont toutes les stars, les problèmes, les discussions, les pull request, etc ?
Après avoir passé 5 ans à travailler sur divers projets pour Badoo/Bumble, je pars maintenant vers une autre aventure. Dans le cadre de cette transition, on m'a demandé de transférer ce référentiel vers le compte Badoo GitHub.
Maintenant, je continue mon travail sur ce projet en tant que copie .
Il ne devrait y avoir aucun changement radical lié à ce transfert. La plupart des liens externes ne doivent pas être rompus. Le lien du référentiel est également le même : arkivanov/Decompose. Veuillez signaler un problème dans ce référentiel si vous pensez que quelque chose est cassé ou ne fonctionne pas correctement.
Voici ce qui est le plus affecté par le transfert :
Toutes les étoiles ont été transférées
Tous les problèmes et discussions ont également été transférés. Je ferai de mon mieux pour combler le vide ici.
Toutes les demandes d'extraction avec tout l'historique des commentaires ont également disparu.
Je continuerai à faire de mon mieux pour ce projet et pour la communauté ! Affaires comme d'habitude !
Ressources supplémentaires :
Un fil de discussion sur Hacker News
Pourquoi se décomposer ?
Decompose décompose le code en composants petits et indépendants et les organise en arborescences. Chaque composant parent ne connaît que ses enfants immédiats.
Decompose trace des limites claires entre le code UI et non-UI, ce qui offre les avantages suivants :
Meilleure séparation des préoccupations
Interface utilisateur spécifique à la plate-forme enfichable (Compose, SwiftUI, Kotlin/React, etc.)
Le code de logique métier peut être testé avec des tests unitaires multiplateformes purs
L'état de navigation est entièrement exposé : branchez n'importe quelle interface utilisateur de votre choix, animez-la à votre guise à l'aide de l'API de votre framework d'interface utilisateur préféré ou utilisez une API prédéfinie.
La navigation est une pure fonction de l'ancien état au nouveau : naviguer sans limites.
Injection de dépendances (DI) appropriée et inversion de contrôle (IoC) via le constructeur, y compris, mais sans s'y limiter, les arguments de type sécurisé.
Logique de navigation partagée
Composants sensibles au cycle de vie
Les composants de la pile arrière ne sont pas détruits, ils continuent de fonctionner en arrière-plan sans interface utilisateur
Préservation de l'état (automatiquement sur Android, manuellement sur toutes les autres cibles via kotlinx-serialization )
Conservation des instances (alias ViewModels) lors des modifications de configuration (surtout utile sous Android)
C'est l'heure du mème !
Installation
Veuillez consulter la section Installation de la documentation.
Plateformes prises en charge
En général, Decompose prend en charge les cibles suivantes : android , jvm , ios , watchos , tvos , macos , wasmJs , js . Cependant, certains modules ne prennent pas en charge toutes les cibles ou la prise en charge dépend de la version de Decompose. Veuillez consulter la documentation d'installation pour plus de détails.
Aperçu
Voici quelques concepts clés de la bibliothèque, plus de détails peuvent être trouvés dans la documentation.
Composant : chaque composant représente un élément de logique avec son propre cycle de vie, l'interface utilisateur est facultative et est branchée en externe
ComponentContext - chaque composant a son propre [ComponentContext], qui prend en compte le cycle de vie des composants et permet la préservation de l'état, la conservation des instances (alias AndroidX ViewModel ) et la gestion du bouton de retour
Child Stack - permet la navigation entre les composants enfants, la navigation imbriquée est également prise en charge
Emplacement enfant - n'autorise qu'un seul composant enfant à la fois, ou aucun
Pages enfants - une liste de composants enfants avec un composant sélectionné (par exemple, navigation de type pager)
Navigation générique : permet de créer votre propre modèle de navigation personnalisé, lorsqu'aucun des modèles prédéfinis ne répond à vos besoins.
Cycle de vie - fournit un moyen d'écouter les événements du cycle de vie dans les composants
StateKeeper - permet de conserver l'état ou les données d'un composant lorsqu'il est détruit
InstanceKeeper - conserve les instances dans vos composants (similaire à AndroidX ViewModel )
BackPressedHandler - fournit un moyen de gérer et d'intercepter les pressions sur le bouton retour
Hiérarchie des composants
Hiérarchie d'interface utilisateur enfichable
Structure typique des composants
Démarrage rapide
Veuillez vous référer à la section Démarrage rapide de la documentation.
Échantillons
Consultez la section Exemples de la documentation pour une description complète de chaque échantillon.
Modèle
Consultez le référentiel de modèles qui peut être utilisé pour démarrer un projet pour vous.
Articles
Décomposer - expériences avec les composants et la navigation Kotlin Multiplatform prenant en compte le cycle de vie
Une navigation complète de trente lignes pour Jetpack/Multiplatform Compose - si vous trouvez Decompose verbeux et préférez quelque chose construit sur Compose.
Série "Approche basée sur les composants" par Artur Artikov
Partie 1 : Combattre la complexité dans les applications Android
Partie 2 : Implémentation d'écrans avec la bibliothèque Decompose