Dependency Injection in JavaScript: Vollständiger Leitfaden für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Dependency Injection in JavaScript: Was es ist und warum man es braucht



In der modernen Entwicklung mit JavaScript (Node.js) werden Code-Sauberkeit und Wartbarkeit immer wichtiger. Eines der Schlüsselprinzipien, um dies zu erreichen, ist Dependency Injection (DI) – die Abhängigkeitsinjektion. Dieser Artikel wurde speziell für Anfänger erstellt, um das Konzept in einfacher Sprache mit praktischen Beispielen zu erklären.



Stellen Sie sich vor, Sie bauen einen Computer zusammen. Anstatt die Grafikkarte fest auf das Mainboard zu löten, verwenden Sie PCI-E-Steckplätze. So können Sie die Grafikkarte leicht gegen eine leistungsstärkere austauschen oder eine andere zum Testen verwenden. Dependency Injection funktioniert nach dem gleichen Prinzip: Sie erstellen Abhängigkeiten nicht innerhalb einer Klasse (Sie "löten" sie nicht ein), sondern übergeben sie von außen.



Das Problem ohne Dependency Injection



Betrachten wir ein typisches Beispiel in Node.js, bei dem der Code fest gekoppelt (tightly coupled) wird:



class Logger {    log(message) {        console.log(`[LOG]: ${message}`);    }}

class UserService { constructor() { this.logger = new Logger(); // Feste Abhängigkeit }

createUser(name) { this.logger.log(`Benutzer erstellt: ${name}`); // Logik zur Benutzererstellung }}

const service = new UserService();service.createUser('Anna');


Hier erstellt UserService selbst eine Instanz von Logger. Wenn wir console.log durch eine Datei- oder Datenbankaufzeichnung ersetzen möchten, müssten wir den Code von UserService ändern. Dies verstößt gegen das Open/Closed-Prinzip aus SOLID.



Grundlagen der Dependency Injection in JavaScript



Was ist Dependency Injection?



Dependency Injection (DI) ist ein Entwurfsmuster, bei dem ein Objekt seine Abhängigkeiten aus einer externen Quelle erhält, anstatt sie selbst zu erstellen. Im Kontext von JavaScript bedeutet dies die Übergabe von Abhängigkeiten über den Konstruktor, einen Setter oder einen Methodenparameter.



Drei Hauptmethoden der Abhängigkeitsinjektion



In JavaScript und Node.js werden drei Ansätze verwendet:



  • Constructor Injection: Abhängigkeiten werden über den Klassenkonstruktor übergeben.
  • Setter Injection: Abhängigkeiten werden über eine separate Methode (Setter) gesetzt.
  • Method Injection: Abhängigkeiten werden direkt an die Methode übergeben, die sie verwendet.


Die beliebteste und empfohlene Methode ist die Constructor Injection, da sie Abhängigkeiten explizit und nach der Objekterstellung unveränderlich macht.



Praktische Beispiele für Dependency Injection in Node.js



Beispiel 1: Constructor Injection



Schreiben wir unser Beispiel mit Dependency Injection um:



class Logger {    log(message) {        console.log(`[LOG]: ${message}`);    }}

class FileLogger { log(message) { // Simulation einer Dateiaufzeichnung console.log(`[FILE]: ${message}`); }}

class UserService { constructor(logger) { this.logger = logger; // Abhängigkeit wird von außen übergeben }

createUser(name) { this.logger.log(`Benutzer erstellt: ${name}`); // Logik zur Benutzererstellung }}

// Verwendung mit verschiedenen Loggernconst consoleLogger = new Logger();const fileLogger = new FileLogger();

const serviceWithConsole = new UserService(consoleLogger);serviceWithConsole.createUser('Anna'); // [LOG]: Benutzer erstellt: Anna

const serviceWithFile = new UserService(fileLogger);serviceWithFile.createUser('Ivan'); // [FILE]: Benutzer erstellt: Ivan


Jetzt weiß UserService nicht, welcher Logger genau verwendet wird. Wir

Blogs

Buchempfehlungen