Divide and Conquer: composant de navigation dans un projet multi-module

Dans cet article, vous apprendrez comment organiser des graphiques de modules / fonctionnalités / user story individuels, les centraliser, créer une navigation directe entre eux et saupoudrer Safe Args avec un plugin sur le dessus.





Vous ĂȘtes maintenant dans la troisiĂšme partie d'un grand article sur le composant de navigation dans un projet multi-module . Si vous ne comprenez pas un seul mot ci-dessus, je vous exhorte Ă  vous familiariser d'abord avec cela:





  • Quelle bĂȘte ce composant de navigation est .





  • Comment fonctionne le plugin Safe Args et ce qu'il fait .





Eh bien, si vous ĂȘtes dĂ©jĂ  familier avec cette bibliothĂšque, alors il y a un bonus intĂ©ressant pour vous dans le prochain article - une approche pour organiser la navigation multipiste de type iOS .





Voyons d'abord Ă  quoi ressemble la division du projet en modules dans notre entreprise dans laquelle je travaille ( magora-systems.com ):





  1. : app est le module principal et le point d'entrée de l'application. Il a besoin de connaßtre tous les modules participant à l'application.





  2. : core-module contient toutes les choses de base: classes de base, modĂšles, entitĂ©, DTO, extensions, etc. 





  3. Les modules utilitaires sont utilisĂ©s pour encapsuler les fonctionnalitĂ©s des principaux composants de l'application. Par exemple, travailler avec un rĂ©seau, une base de donnĂ©es ou la mĂȘme navigation.





  4. Les modules de fonctionnalités incluent le travail d'une fonctionnalité / histoire utilisateur spécifique, que ce soit un flux ou un écran.





, Safe Args .





, :





. , :





  1. feature-.





  2. Top-level .





  3. .





  4. , Top-level .





.





feature-

destination- , feature- . , Safe Args , , .





Top-level

— , , .





, .





, , global action.





, Top-level  

, :





  1. (:core)





− , . − , . , Lint-a, .





− , , .





  1. (:app)





+ .





− .





− Safe args global action- feature- , .





, :app-, Top-level . 






:





: (:navigation), , - .





id action-. generated- , , id .





<item name="actionglobalnavsignin" type="id"/>
<item name="actionglobalnavsignup" type="id"/>
<item name="actionglobalnavhome" type="id"/>
<item name="actionglobalnavuserslist" type="id"/>
<item name="actionglobalnavuserdetails" type="id"/>
<item name="actionglobalnavonšC11CglobalšC12Csettings" type="id"/>
<item name="actionšC13Cto_faq" type="id"/>
      
      



: Directions Args :app  





Safe args global action- feature- , .





: generated-. -. Generated- build- , ( :app), :navigation- . : generateSafeArgs, , Args- Directions- R :app, .





ext {
   navigationArgsPath = '/build/generated/source/navigation-args'
   appNavigation = "${project(':app).projectDir.path}$navigationArgsPath"
   navigationPath = "${project(':navigation').projectDir.path}$navigationArgsPath"
   navigationPackage = “com.example.navigation”
}

tasks.whenTaskAdded { task ->
   if (task.name.contains('generateSafeArgs')) {
       task.doLast {
           fileTree(appNavigation)
                   .filter { it.isFile() && it.name.contains("Directions") }
                   .forEach { file ->
                       if (file.exists()) {
                           def lines = file.readLines()
                           lines = lines.plus(2, "import $navigationPackage.R")
                           file.text = lines.join("\n")
                       }
                   }
       }
       move(file("$appNavigation"), file("$navigationPath"))
   }
}
      
      



, , . - , , , . 





— , sourceSet-s .





Je ne me suis pas attardĂ© sur cette victoire et j'ai dĂ©cidĂ© de voir ce qui pouvait ĂȘtre fait d’autre Ă  ce sujet. Pour cela, un projet dans lequel le client voulait une application avec un menu en bas et que chaque onglet conserve son Ă©tat en le quittant s'est avĂ©rĂ© utile comme jamais auparavant. C'est Ă  propos de cette dĂ©cision que porte la derniĂšre partie de mon histoire sur la navigation multistack de type iOS .








All Articles