Home / Android-Entwicklung / Das Android Arsenal – Architektur

Das Android Arsenal – Architektur

Kompakte Container-Bibliothek für den reaktiven Status für Android-Anwendungen.

Knot hilft beim Verwalten des Anwendungsstatus, indem es auf Ereignisse reagiert und asynchrone Aktionen auf strukturierte Weise ausführt. Es gibt fünf Kernkonzepte, die Knoten definieren: Staat Veränderung Reduzierung Wirkung und Aktion ] State repräsentiert einen unveränderlichen Teilzustand einer Android-Anwendung. Dies kann ein Status eines Bildschirms oder ein Status einer internen kopflosen Komponente sein, z. B. ein Repository.

Änderung ist ein unveränderliches Datenobjekt mit einer optionalen Nutzlast, die zum Ändern des Status bestimmt ist. Eine Änderung kann aus einem externen Ereignis oder aus der Ausführung einer Aktion resultieren.

Aktion ist eine synchrone oder asynchrone Operation, die nach Abschluss kann eine neue Änderung ausgeben.

Reduzierer ist eine Funktion, die den vorherigen Zustand und eine Änderung als Argumente verwendet und die neue zurückgibt ] Staat und eine optionale Aktion verpackt in die Klasse Effect . Reduktionsmittel in Knot ist ein Konstrukteur, der frei von Nebenwirkungen bleibt, da jede Nebenwirkung in eine Aktion umgewandelt und zusammen mit einem neuen Zustand von der Reduktionsmittelfunktion zurückgegeben werden kann.

Wirkung ist eine praktische Wrapper-Klasse, die den neuen Bundesstaat und eine optionale Aktion enthält. Wenn Aktion vorhanden ist, führt Knot diese aus und liefert die resultierende Änderung zurück zu Reduzierung .

Das folgende Beispiel deklariert einen Knoten, der Daten laden und verarbeiten kann Erfolgreich und Fehler beim automatischen Laden von Ergebnissen und beim erneuten Laden von Daten, wenn ein externes "Datenänderungs" -Signal empfangen wird. Es schreibt auch alle staatlichen Mutationen sowie alle verarbeiteten Änderungen und Aktionen in Konsole.

 versiegelt  Klasse  Staat 
 {
    Objekt  leer :  Bundesstaat 
 ()
    Objekt  Laden :  Bundesland 
 ()
    Daten  Klasse  Inhalt  ( Wert  Daten :  Zeichenfolge ) :  Status 
 ()
    Datenklasse  fehlgeschlagen  ( val  error :  Throwable 


)
}

 versiegelt  Klasse  Veränderung 
 {
    Objekt  Laden :  Ändern 
 () {
       Daten  Klasse  Erfolg  ( Wert  Daten :  Zeichenfolge ) :  Ändern 
 ()
       Daten  Klasse  Fehler  ( Wert  Fehler :  Throwable ) :  Ändern 



 (
   }
}

 versiegelt  Klasse  Aktion 
 {
    Objekt  Laden :  Handeln 


 ()
}

 val  knot  =  knot < state  change  action 

> {
    Zustand {
        initial  =  Bundesstaat .  Leer 



    }
    Änderungen {
        verringern  - > 
wenn 
 (ändern) {
                 ist  Ändern .  Laden  - >  Zustand .  Laden  +  Aktion  ] Laden 
 ist  Ändern .  Laden .  Erfolg  - >  Zustand .  Inhalt .  nur Daten 
)
                 ist  Ändern .  Laden .  Scheitern  - >  Zustand .  Gescheitert 




 (Fehler) .nur
            }
        }
    }
    Aktionen {
        perform < Action .  Load 
> {
            switchMapSingle < String 
> {api.load ()}
                .map < Change > { Change .  Load .  Success 
 (it)}
                .onErrorReturn { Change .  Load .  Failure 




 (it)}
        }
    }
    Veranstaltungen {
        Quelle {
            dataChangeObserver.signal.map { Change .  Load 



}
        }
    }
    sehen {
        state { println  ( " state: $ it " 
)}
        Änderungen { println  ( " change: $ it " 
)}
        Aktionen { Druck  ( " Aktion: $ it " 



)}
    }
}

knot.change.accept ( Change .  Load ) 

Beachten Sie, wie innerhalb von Reduce Function ein neuer State mit Aktion mit dem Operator + . Der reine Zustand kann vom Reduzierer zurückgegeben werden, indem dem Zustand nur das Suffix hinzugefügt wird.

Wenn Ihr Knoten groß wird und Sie seine Rötbarkeit verbessern möchten und Wartbarkeit können Sie in Betracht ziehen, um es zu zerlegen. Sie beginnen die Zerlegung, indem Sie verwandte Funktionen in gewisser Weise in nicht zusammensetzbare Teile gruppieren, die als Primes bezeichnet werden.

Jeder Prime ist vom anderen Primes isoliert. Es definiert eine eigene Reihe von Änderungen Aktionen und Reduzierungen . Es ist nur der Staat den die Primes teilen. In dieser Hinsicht kann jeder Prime als separater Knoten angesehen werden, der an einem gemeinsamen Staat arbeitet. Sobald alle Primzahlen definiert sind, können sie zusammengesetzt und für CompositeKnot bereitgestellt werden, das die Standardschnittstelle Knot implementiert.

  • Vorhersagbarer Zustand ist die einzige Quelle von Wahrheit.
  • Nebenwirkungsfreier Reduzierer – durch Desing.
  • Skalierbar – einzelne Knoten können zu komplexeren Anwendungslogiken kombiniert werden.
  • Zerlegbar – komplexe Knoten können durch verwandte Funktionen in Primzahlen zerlegt werden. [19659071] Strukturierte – einfach zu lesende und zu schreibende deklarative API zum Schreiben von besser strukturiertem und weniger fehlerbehaftetem Code.
  • Prägnante – minimalistische API und kompakte Implementierung.
  • Testbar – Reduzierungen und Transformatoren sind einfach zu testen.
  • Warum nicht ?
 Abhängigkeiten {
    Implementierung  ' de.halfbit: knot: ' 

} 

Knot wurde von zwei großartigen Projekten inspiriert














 Copyright 2019 Sergej Shafarenka, www.halfbit.de

Lizenziert unter der Apache-Lizenz, Version 2.0 (die "Lizenz");
Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden.
Eine Kopie der Lizenz erhalten Sie unter

   http://www.apache.org/licenses/LICENSE-2.0

Sofern nicht gesetzlich vorgeschrieben oder schriftlich vereinbart, Software
unter der Lizenz vertrieben wird auf einer "AS IS" -Basis verteilt,
OHNE GARANTIEN ODER BEDINGUNGEN JEGLICHER Art, entweder ausdrücklich oder stillschweigend.
In der Lizenz finden Sie die spezifische Sprache für die Berechtigungen und
Einschränkungen unter der Lizenz.

.

About AndroidWeltEditor

Check Also

Common policy violations and how you can avoid them

By Andrew Ahn, Product Manager, Google Play App Safety At Google Play, we want to …

Leave a Reply

Your email address will not be published. Required fields are marked *