Abhängigkeitsinjektion in TypeScript

Motivation

In den letzten Jahren hat sich Node zu einer der beliebtesten Back-End-Lösungen entwickelt. Es ist sehr einfach, eine App auf Node zu booten und sofort HTTP-Anfragen zu verarbeiten. Aber es gibt ein Problem, in den meisten Fällen werden Node-Apps sehr kompliziert und gekoppelt, während sie wachsen, sodass es extrem schwierig wird, Domänen- und Persistenzebenen getrennt zu halten.

Um dieses Problem zu lösen, sollten wir in die Welt der SOLID- Architektur eintauchen (ein Teil davon für heute). Um Code gemäß SOLID- Richtlinien zu schreiben , benötigen wir Dependency Injection . Es ermöglicht uns, die Erstellung von Klassen getrennt von ihrer Implementierung zu abstrahieren, was die Domänen-/Geschäftslogik von allen anderen Schichten trennt und die Wartung des Codes erleichtert.

Es gibt keine Standardlösung für die Abhängigkeitsinjektion in Node, aber wir können unseren eigenen DI-Dienst mit Hilfe von TypeScript-Dekoratoren implementieren.

Tauchen wir ein.

Implementierung

Da sich Dekoratoren noch im experimentellen Modus befinden, müssen wir sie in tsconfig.json aktivieren

{
"compilerOptions": {
"target": "ES5",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"outDir": "dist"
}
}

Lassen Sie uns generische Logger als Ccass definieren, die von tatsächlichen Loggern implementiert werden

Nichts Besonderes hier, nur eine abstrakte Klasse mit einer einzigen logMethode. Werfen wir nun einen Blick auf mögliche Logger-Implementierungen.

Für jede Abhängigkeit benötigen wir einen eindeutigen Zeichenfolgenbezeichner, der der tatsächlichen Klasseninstanz zugeordnet wird

Jetzt brauchen wir eine Art Managerklasse, die alle initialisierten Klassen speichert und sie injiziert, wann immer abhängige Klassen sie benötigen.

Wir haben Logger-Klassen, die wir injizieren möchten, und DependencyManager, der alle benötigten Mappings speichert. Das einzige, was übrig bleibt, ist @Inject Decorator (lesen Sie hier mehr über TypeScript-Decorators), der sich mit Hilfe unseres Dependency Managers um das Einfügen von tatsächlichen Instanzen von Klassen kümmert

An diesem Punkt sind wir bereit, unseren Inject-Decorator zu verwenden und unseren Code in Aktion zu sehen

Output:
LogServiceA -> test
LogServiceB -> test

Output:
LogServiceC -> test

Zusammenfassung

Dies war eine kleine Einführung in Dependency Injection in Node. Abhängigkeitsinjektion geht viel tiefer, z. B. das direkte Injizieren in den Konstruktor und die Verwendung von Symbolen anstelle von Token (ähnlich wie bei Angular). Ich hoffe jedoch, dass dies Ihnen einen kleinen Einblick in die Funktionsweise von Dependency Injection hinter den Kulissen gegeben hat. Als ich mit dem Codieren begann, war Dependency Injection eine Blackbox, von der ich wusste, dass sie sehr hilfreich war, aber keine Ahnung hatte, wie es funktioniert. Ich hoffe, nach diesem Artikel gibt es noch einen magischen Teil über Software-Engineering, bei dem Sie nicht mehr im Dunkeln tappen.

Code hier verfügbar .

Viel Spaß beim Hacken!

Suggested posts

Meine am häufigsten verwendeten Codierungsressourcen

Meine am häufigsten verwendeten Codierungsressourcen

Diese Woche erhielt ich eine E-Mail von einem Mitglied der täglichen E-Mail-Liste. Sie wollten wissen: Welche Ressourcen besuchen Sie täglich, wöchentlich und monatlich? Tolle Frage! Ich versuche gerne, einige Einblicke in meinen Arbeitsablauf und die wichtigsten Ressourcen, die ich verwende, mit Ihnen zu teilen.

Hypermoderne Terminal-Toolbox

Hypermoderne Terminal-Toolbox

Terminal-, Shell- und Befehlszeilentools setzen im Jahr 2023 Maßstäbe. Alle Entwickler verwenden Terminals; Für einige ist ihr gesamter Arbeitsablauf das Terminal. In diesem Beitrag wird die Hypermodern Terminal Toolbox vorgestellt – Terminal-, Shell- und Befehlszeilentools, die im Jahr 2023 Maßstäbe setzen. Kitty als Terminal-Emulator Kitty ist ein Terminal-Emulator – eine Alternative zum GNOME-Terminal , Alacritty oder das Windows-Terminal.

Related posts

Die Cowboy-Lüge

Wie Megakonzerne den Amerikanern eine fette Lüge verkauften

Die Cowboy-Lüge

Es ist ein strahlend goldener Morgen in den sanften Hügeln des Westens, während die ersten Sonnenstrahlen das gefrorene Gras auf den Ebenen erhellen. Eine Herde friedlicher Angus-Rinder, pechschwarz und massig, zeichnet sich vor dem Sonnenaufgang ab, während sie einen ausgetretenen Pfad entlang zu einem Ort geht, den sie alle gut kennen; die Frühstücksbar.

Der Soloauftritt des rothaarigen Mädchens

Im Auftrag von Hayden filmt Katie sich selbst beim Masturbieren.

Der Soloauftritt des rothaarigen Mädchens

Es war nach Mitternacht, als Hayden Katie nach ihrem gemeinsamen Abend zurück in ihren Studentenwohnheim fuhr. Sie hatte morgens einen frühen Unterricht und hatte keine Kleidung mehr zum Wechseln, nachdem sie die Nacht zuvor bei ihm übernachtet hatte.

Die Workplace-Revolution: Top-Experten diskutieren über Hybrid- und Remote-Arbeit

Die Workplace-Revolution: Top-Experten diskutieren über Hybrid- und Remote-Arbeit

In der sich schnell entwickelnden Geschäftslandschaft von heute hat das Konzept der Hybrid- und Remote-Arbeit eine beispiellose Dynamik erlangt. Während sich Unternehmen weiterhin an die sich verändernden Bedürfnisse und Erwartungen ihrer Mitarbeiter anpassen, sind Experten aus verschiedenen Bereichen zusammengekommen, um die Vorteile, Herausforderungen und die Zukunft dieser transformativen Arbeitsweise zu diskutieren.

Die Verfolgung von Christen: Das Hassverbrechen, über das wir nicht sprechen

Vergessen Sie Islamophobie: Christen (und Juden) sind die Hauptopfer religiöser Hassverbrechen.

Die Verfolgung von Christen: Das Hassverbrechen, über das wir nicht sprechen

Jeder rational denkende Mensch weiß, dass die politischen und medialen Kreise von der Linken dominiert werden, sogar von der extremen Linken, ein Zustand, der zu einem Ungleichgewicht im politischen Diskurs führt. Im Bereich der Religion ist dieses Ungleichgewicht deutlich sichtbar: Linke Zeitungen und Netzwerke beeilen sich nicht, den christlichen Glauben zu verteidigen.