Typescript mit Effect
Effect ist eine Typescript-Bibliothek, die komplizierte Dinge vereinfacht: Orchestrierung von Services, Concurrency, Fehlerbehandlung, Testen und vieles mehr. Aber was ist Effect wirklich und wie wird es eingesetzt?
Publiziert am von Philip Schönholzer
Was ist Effect? Das ist eine schwierige Frage, die ich mit ein paar Beispielen beantworten möchte.
Man kann sich `Effect` vereinfacht als eine JS-Funktion mit Superpower vorstellen.
Das obige Beispiel hat aber noch keinen Vorteil gegenüber einer einfachen Funktion.
Die interessanten Fähigkeiten von `Effect` sind die Fehlerbehandlung und wie Services implementiert werden. Dies wird auch im Typ von `Effect` sichtbar.
Dieses Programm kann den Fehler `NumberNotFound` werfen und benötigt den Service `NumberService`. Den Fehler muss ich nicht behandeln, wenn ich das nicht will, aber den Service muss ich dem Programm zur Verfügung stellen, sonst läuft es nicht (siehe Kapitel Services).
Fehlerbehandlung
Wenn ein Fehler auftritt, gibt es viele Möglichkeiten, wie ich damit umgehen kann. Entweder ich versuche den Effekt erneut auszuführen, ich stelle einen Default zur Verfügung, ich zeige den Fehler dem Benutzer an, etc.
In diesem Beispiel wird einmal versucht, die Nummer erneut zu erhalten und ansonsten eine 7 zurückgegeben. Im `Effect` Typ ist der mittlere Typ nun auch `never`, da immer eine Nummer zurückgegeben wird.
Services
Im obigen Beispiel ist ein `NumberService` zu sehen, der den Effekt `getNumber` zur Verfügung stellt. Die Implementierung dieses Services wird erst vor der Ausführung des Programms zur Verfügung gestellt. Dadurch können je nach Situation (z.B. Produktions- oder Testumgebung) unterschiedliche Implementierungen zur Verfügung gestellt werden.
Der oben genannte Service könnte z.B. wie folgt implementiert werden:
Um diesen Service dem Programm zur Verfügung zu stellen, muss er noch "bereitgestellt" werden.
Mit `Effect` ist es üblich, einem Service einen anderen Service zur Verfügung zu stellen und die Implementierung aller Services erst vor der Ausführung zur Verfügung zu stellen. So kann z.B. die DB einer Anwendung im Testfall ein Mock sein und die anderen Services, die die DB verwenden, werden normal genutzt.
Effects kombinieren
Ein Effect ist ein Legostein. Richtig cool wird es aber erst, wenn man mehrere dieser Legosteine zusammensetzen kann. Dafür gibt es verschiedene Kombinatoren und Techniken. Hier eine kleine Auswahl:
Infos zu Effect
Effect lernt man nicht an einem Nachmittag. Aber mit wenig Wissen kann man viel aus der Bibliothek herausholen. Mehr Infos gibt es hier: