Divide and Conquer: Komponen Navigasi dalam Proyek Multi-Modul

Pada artikel ini, Anda akan belajar bagaimana Anda dapat mengatur grafik modul / fitur / cerita pengguna individual, memusatkannya, membangun navigasi langsung di antara mereka dan menaburkan Safe Args dengan plugin di atasnya.





Anda sekarang berada di bagian ketiga dari artikel besar tentang Komponen Navigasi dalam proyek multi-modul . Jika Anda tidak memahami satu kata pun di atas, maka saya mendorong Anda untuk terlebih dahulu membiasakan diri dengan itu:





  • Betapa hebatnya Komponen Navigasi ini .





  • Bagaimana plugin Safe Args bekerja dan apa fungsinya .





Nah, jika Anda sudah terbiasa dengan pustaka ini, maka ada bonus bagus untuk Anda di artikel berikutnya - pendekatan untuk mengatur navigasi multistack seperti iOS .





Pertama, mari kita lihat bagaimana pembagian proyek menjadi modul di perusahaan tempat saya bekerja ( magora-systems.com ):





  1. : app adalah modul utama dan pintu masuk ke aplikasi. Dia perlu tahu tentang semua modul yang berpartisipasi dalam aplikasi.





  2. : core-module berisi semua hal dasar: kelas dasar, model, entitas, DTO, ekstensi, dll. 





  3. Modul utilitas digunakan untuk merangkum fungsionalitas komponen aplikasi utama. Misalnya, bekerja dengan jaringan, database, atau navigasi yang sama.





  4. Modul-fitur mencakup pekerjaan fitur / cerita pengguna tertentu, baik itu alur atau layar.





, 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 .





Saya tidak memikirkan kemenangan ini dan memutuskan untuk melihat apa lagi yang bisa dilakukan untuk mengatasinya. Untuk ini, proyek di mana pelanggan menginginkan aplikasi dengan menu bawah dan setiap tab mempertahankan statusnya saat meninggalkannya menjadi berguna seperti sebelumnya. Tentang keputusan inilah bagian terakhir dari cerita saya tentang navigasi multistack seperti iOS .








All Articles