Karl Gorman
21
September
2021
Tags: AngularEntwicklung
Dependency Injection in Angular

Einleitung zur Dependency Injection in Angular

Der ukrainische IT-Markt überschreitet die erwartete Kurve während eines weltweiten Übergangs zur Remote-Arbeit deutlich. Im Jahr 2020 wuchs der IT-Export aus der Ukraine um über 20 % und trug dazu bei, die Exportrekorde zu brechen, indem er die jährliche Exportsumme auf über fünf Milliarden US-Dollar erhöhte.

Der jährliche Zuwachs der Ukraine im IT-Sektor ist weitgehend auf minimale Restriktionen, eine stabile Steuerpolitik der Branche, die beispiellose Professionalität ihrer IT-Spezialisten und hervorragendem Design zurückzuführen. Kommen wir nun zur Sache und schauen wir uns eines der weit verbreiteten Designprinzipien an, die das Backend von Anwendungen erheblich verbessern. Dieser Artikel bietet eine Einführung in die Dependency Injection in Angular.

Was ist Dependency Injection

Unter Dependency wird ein Objekt gemeint, von dem ein anderes Objekt abhängt. Mehrere Dependencies können die Codestruktur verkomplizieren und das Lesen, Gebrauch oder Testing erschweren.

Hier kommt Dependency Injection ins Spiel, um eine bessere Erfahrung mitzubringen. Der Zweck der Dependency Injection besteht darin, Dependency von außerhalb der Klasse zu übergeben, um eine Codekopplung zu vermeiden, die innerhalb der Klasse auftreten könnte.

Die Klasse, die das abhängige Objekt enthält, wird als „Client“ bezeichnet, und die Klasse, die die Abhängigkeit enthält, wird als „Service“ bezeichnet. Das Ziel besteht darin, Dependency vom Service zum Client über einen Injektor zu starten, damit die Client- und Serviceklassen nicht eng gekoppelt sind.

Zusammengefasst ist Dependency Injection ein Designprinzip, das den Klassen ermöglicht, Dependency von externen Quellen zu übernehmen, anstatt den Code durch das Erstellen der Dependency selbst zu schaffen.

promo image3
Auf der Suche nach einer neuen Herausforderung?

Interessante Projekte

Zuverlässige Arbeitgeber

Faire Vergütung

Welche Arten von Dependency Injection gibt es?

Es gibt drei Arten von Dependency Injection:

Konstruktor Injection

Konstruktor Injection ist, wenn eine Dependency oder ein Service durch den Konstruktor der Clientklasse übergeben wird. In diesem Fall hat die Dependency eine längere Lebensdauer im Vergleich zur Lebensdauer der Clientmethode und kann über mehrere Methoden hinweg verwendet werden. Hier ist es wichtig, mit Validierungscode zu verhindern, dass der Injektor Nullwerte übergibt.

Property Injection

Bei der Property Injection, auch als Setter Injection bezeichnet, wird die Dependency über die Public Property der Clientklasse an den Client übergeben. Diese art der Dependency ist nur anwendbar, wenn die Dependency Injection optional ist. Dependency bei der Klassenerstellung übergeben wird oder nicht. Außerdem führt die Property Injection zu einer zeitlichen Kopplung, was bedeutet, dass der Client ein Mitglied der Klasse vor einem anderen aufrufen soll. Daher sollten kritische Anwendungen, die möglicherweise unter optionaler Dependency leiden könnten, keine Property Injections verwenden.

Methode Injection

Bei der Methode Injection wird eine Schnittstelle zum Austausch von Dependency geschaffen. Die Schnittstelle deklariert eine Methode zum Übergeben der Dependency und diese Schnittstelle wird von der Clientklasse implementiert, die als Basis für den Injektor verwendet wird, um Dependency zu übergeben. Die Methode Injection ist flexibel, da sie Raum lässt, die Dependency zu variieren und nach der Verwendung zu erneuern.

Dependency Injection in Angular

Dependency Injection ist einer der Vorteile von Angular und vielleicht sogar das wichtigste Verkaufsargument für Benutzer. Das Angular-Framework hat eine Dependency Injection (DI), die es Klassen ermöglicht, die Dependency auszuleihen, wodurch die Modularität und Simplizität des Codes einer Anwendung erhöht wird. Schauen wir uns die verschiedenen Elemente, um mehr Klarheit darüber zu haben, was Dependency Injection in Angular ist.

Client (Consumer)

Die Client-Klasse oder der Consumer ist die Klasse, die die Dependency benötigt, um zu funktionieren. Das Beste an Consumern im DI-Framework von Angular ist, dass es auf einer gekapselten Codelogikschicht funktioniert. Es ist nicht wichtig, wie Abhängigkeiten erstellt werden oder wie sie überhaupt entstanden sind. Auch die von den Consumern abhängigen Klassen oder Methoden haben den Vorteil der Kapselung.

Service (Dependency)

Dependency ist ein Service, das an die Clientklasse gerendert wird. Eine Dependency kann entweder einmalig verwendet werden oder auf mehrere Clients mehrfach zugegriffen werden. Services, die Dependencys bereitstellen, sind die Stärke von Angular und können von verschiedenen Verbrauchern problemlos verwendet werden.

Provider

Der Provider ist wie ein Registersystem, das die Aufnahmen der Dependencys verwaltet und bei der Dependency Identifikation verwendet werden kann. Es verwendet das DI-Token bei der Identifizierung. Der Provider registriert Dependency, indem er Services aufnimmt und beim Injektor registriert. Der Anbieter ist wie ein Leitfaden für den Injektor und ermöglicht, Instanzen von Services zu erstellen, indem er die für die Funktion notwendigen Anweisungen skizziert. Registrierte Services werden als Singletons bezeichnet, was bedeutet, dass die Informationen zur Instanziierung dieses Services nur mit einem Injektor vorhanden sind.

DI-Token

Das DI-Token wird verwendet, um den Provider zu identifizieren. Es wird bei der Registrierung der Dependency verwendet. Angular unterstützt drei Arten von Token: Typ-Token, String-Token und Injection-Token.

Injektor

Injektoren speichern Metadaten und Anweisungen zum Erstellen von Diensten. Sie werden als Werkzeug verwendet, um Informationen über die Dependencys von Providern zu extrahieren. Danach erstellen sie Instanzen des Service (Dependency) und stellen sie dem Client zur Verfügung. Injektoren sind der Kern des DI-Frameworks, da sie alle Service- und Dependency Daten darin speichern, sodass die Сonsumer- oder Client-Klassen klar, modular und gut lesbar sind. Sie übernehmen die Erstellung der Services von den Clients ab.
Dies sind die übergeordneten und primären Elemente von Angular, die mehrere untergeordnete Elemente aufweisen. Weitere Informationen finden Sie in den offiziellen Dokumenten von Angular.

Vorteile von Dependency Injection in Angular

Angular ist bei vielen Entwicklern beliebt , weil es eine Möglichkeit bietet, Clean Code zu schreiben und die Modularität unterstützt. Hier sind einige Vorteile der Dependency Injection in Angular:

Vermeiden einer engen Kopplung

Wie oben schon erwähnt wurde, ist die Kapselung eine großartige Möglichkeit, die enge Kopplung verschiedener Module zu vermeiden. Die Client-Klasse weiß kaum, wie und wo die Dependencys erstellt werden, und sollte sich auch nicht um die Codelogik kümmern. Dies fördert Modularität und einfach lesbaren Code.

Hohe Wiederverwendbarkeit

Jeder instanziierte Service kann abhängig von seiner Lebensdauer bei mehreren Clientklassen wiederverwendet werden. Eine Bibliothek solcher Services ist sehr nützlich, wenn das Projekt im Laufe der Zeit skaliert werden soll.

Einfache Kontrolle

Stellen Sie sich vor, Sie gehen einen Code durch, der so einfach ist wie das Lesen einer Schritt-für-Schritt Bedienungsanleitung. Es klar und übersichtlich verfasst. Dies ist nicht nur einfach zu testen, sondern auch leicht zu korrigieren. Wenn etwas zum Ändern ist, braucht man nur eine Änderung in der Dependency und das hat Effekt auf alle Consumers

Einfacher zu skalieren und zu warten

Da es bei der Verwendung von Dependency Injection viel einfacher ist, einen Punkt statt mehrere zu reparieren, senkt dies die Wartungskosten erheblich. Die Entwicklungskosten sind viel kleiner als die Wartungskosten. Ausserdem ist es für Entwickler aufgrund der Bibliothek wiederverwendbarer Dependencys einfacher,Codebytes auszuwählen und umzusetzen, anstatt vom Grund auf anzufangen, wenn das Projekt im Gange ist. Auch die Fähigkeit der Services, von anderen Services abhängig zu sein, macht das fortschreitende Wachstum des Projekts noch überschaubarer.

Einfache Kooperation

Dependency Injection fördert entwicklerunabhängigen Code, da er an mehrere Klassen gebunden ist, die von verschiedenen Entwicklerteams erstellt wurden. Daher ist es wichtig, den Dependency Code generisch zu halten.

Crisp Code

Da Angular vieles erleichtert, indem es sich um Aufgaben wie das Registrieren von Dependencys mit dem Injektor und das Generieren von Services kümmert, ist es möglich, einfachen Code mit dem geringsten Durcheinander zu schreiben.

Dependency Injection mit Code Beispielen

Nun wo wir einen guten Überblick über die Dependency Injection mit Angular haben, finden Sie hier eine schrittweise Aufschlüsselung einiger Code Beispiele für die Dependency Injection basierend auf dem
Live-Projekt von Angular Docs.

angular table

Im Fall von Dependency Schichten, wie im Paragraph “Zusätzlich” beschrieben wurde, ist der Provider der Lieferant aller Daten, die der Injektor benötigt, um die Instanzen nach Bedarf zu erstellen.

Betrachten Sie das DI-Framework als ein hierarchisches System, in dem Klassen von Injektoren abhängen, die Services basierend auf den Informationen, die sie haben, und den Anforderungen, die sie erhalten, erstellen. Die Hierarchien dienen auch als Service für Dependency, wodurch ein reibungsloser Codefluss von der gekapselten High-Level-Ebene des Consumers zu den Low-Level-Definitionen der Abhängigkeiten ermöglicht wird.

Angular konzentriert sich stark auf der Verbesserung und Optimierung bzw. bietet eine einfach zu bedienende Benutzeroberfläche über sein DI-Framework. Sogar ihre offiziellen Dokumente erklären und betonen klar und deutlich, warum Dependency Injection als Designprinzip sehr effizient ist

Fazit

Dependency Injection ist eine der besten Code Tools, das den Entwicklern ermöglicht, das Designprinzip zu implementieren. Es fördert nachhaltigen, wertschöpfenden und unabhängigen Kodex, der äußerst geschätzt und stark nachgefragt wird. Mit Angular wird die Implementierung von Dependency Injection durch das schnelle DI-Framework erleichtert, das modulare und flexible Codierung fördert. Ich hoffe wir haben Sie genug motiviert, Dependency Injection bei Ihrem Code auszuprobieren.

Teilen Sie uns Ihre Anforderungen mit, und wir melden uns bei Ihnen.