In diesem Artikel erfahren Sie, wie Sie Diagramme einzelner Module / Features / User Storys organisieren, zentralisieren, eine direkte Navigation zwischen ihnen erstellen und Safe Args mit einem Plugin darĂźber streuen kĂśnnen.
Sie befinden sich jetzt im dritten Teil eines groĂen Artikels Ăźber Navigationskomponenten in einem Projekt mit mehreren Modulen . Wenn Sie oben kein einziges Wort verstehen, fordere ich Sie auf, sich zunächst damit vertraut zu machen:
Was fĂźr ein Biest diese Navigationskomponente ist .
Wie das Safe Args Plugin funktioniert und was es tut .
Wenn Sie mit dieser Bibliothek bereits vertraut sind, gibt es im nächsten Artikel einen schÜnen Bonus fßr Sie - einen Ansatz zur Organisation der iOS-ähnlichen Multistack-Navigation .
Lassen Sie uns zunächst sehen, wie die Aufteilung des Projekts in Module in unserem Unternehmen aussieht, in dem ich arbeite ( magora-systems.com ):
: app ist das Hauptmodul und der Einstiegspunkt in die Anwendung. Er muss Ăźber alle Module Bescheid wissen, die an der Anwendung teilnehmen.
: Kernmodul enthält alle grundlegenden Dinge: Basisklassen, Modelle, Entität, DTO, Erweiterungen usw.
Dienstprogrammmodule werden verwendet, um die Funktionalität der Hauptanwendungskomponenten zu kapseln. Zum Beispiel mit einem Netzwerk, einer Datenbank oder derselben Navigation arbeiten.
Feature-Module umfassen die Arbeit eines bestimmten Features / einer bestimmten User Story, sei es ein Flow oder ein Bildschirm.
, Safe Args .
, :
. , :
feature-.
Top-level .
.
, Top-level .
.
feature-
destination- , feature- . , Safe Args , , .
Top-level
â , , .
, .
, , global action.
, Top-level
, :
(:core)
â , . â , . , Lint-a, .
â , , .
(: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 .
Ich habe mich nicht mit diesem Sieg befasst und beschlossen zu sehen, was noch dagegen getan werden kann. Ein Projekt, bei dem der Kunde eine Anwendung mit einem unteren MenĂź wĂźnschte und bei dem jede Registerkarte ihren Status beim Verlassen beibehält, war praktisch wie nie zuvor. Ăber diese Entscheidung geht es im letzten Teil meiner Geschichte Ăźber die iOS-ähnliche Multistack-Navigation .