2016-04-21 8 views
2

Was ist der Unterschied mit der Modularisierung eines Javascript-Codes (mit browserify durch Beispiel) und der Dependency-Injektion?Unterschied zwischen Javascript Modularisierung und Abhängigkeit Injection

Sind sie Synonyme? Gehen die beiden zusammen? Oder fehlt mir etwas?

+0

Haben Sie sich https://en.wikipedia.org/wiki/Module_(disambiguation)#Computing_and_engineering und https://en.wikipedia.org/wiki/Dependency_injection angesehen? – Bergi

Antwort

1

Modularisierung bezieht sich auf das Aufbrechen von Code in einzelne, unabhängige "Pakete".
Abhängigkeitsinjektion bezieht sich auf nicht hartcodierende Verweise auf andere Module.

Als praktisches Beispiel, können Sie Module schreiben, die Dependency Injection nicht verwenden:

import { Foo } from 'foo'; 

export function Bar() { 
    return Foo.baz(); 
} 

Hier haben Sie zwei Module, aber dieses Modul importiert einen bestimmten anderen fest codierten Modul.

Das gleiche Modul mit Dependency Injection geschrieben:

export function Bar(foo) { 
    return foo.baz(); 
} 

Dann jemand anderes kann diese verwenden, wie:

import { Foo } from 'foo'; 
import { Bar } from 'bar'; 

Bar(Foo()); 

Sie die Foo Abhängigkeit bei Anrufzeit injizieren, anstatt die Abhängigkeit von hartzucodieren .

1

Sie können diese verweisen article:

Module Codefragmente sind, die bestimmte Funktionalität zu implementieren und geschrieben werden durch spezielle Techniken. Es gibt kein Out-of-the-Box-Modularisierungsschema in der JavaScript-Sprache. Die kommende ECMAScript 6-Spezifikation tendiert dazu, dies zu lösen, indem das Modulkonzept in der JavaScript-Sprache selbst eingeführt wird. Das ist die Zukunft.

und Dependency injection in JavaScript

Ziel

Lasst uns sagen, dass wir zwei Module haben. Der erste ist ein Dienst, der Ajax-Anfragen macht und der zweite ist ein Router.

var service = function() { 
    return { name: 'Service' }; 
} 
var router = function() { 
    return { name: 'Router' }; 
} 

Wir haben eine andere Funktion, die diese Module benötigt.

var doSomething = function(other) { 
    var s = service(); 
    var r = router(); 
}; 

Und die Dinge ein wenig interessanter die Funktion machen einen weiteren Parameter akzeptieren muss. Sicher, wir könnten den obigen Code verwenden, , aber das ist nicht wirklich flexibel. Was, wenn wir ServiceXML oder ServiceJSON verwenden möchten. Oder was ist, wenn wir einige der Module für Testzwecke nachbauen wollen. Wir können nicht nur den Körper der Funktion bearbeiten. Die erste Sache, die wir alle aufkommen, besteht darin, die Abhängigkeiten als Parameter an die Funktion zu übergeben. D.h .:

var doSomething = function(service, router, other) { 
    var s = service(); 
    var r = router(); 
}; 

Auf diese Weise sind wir vorbei, die genaue Umsetzung des Moduls , die wir wollen. Dies bringt jedoch ein neues Problem mit sich. Stellen Sie sich vor, wir haben etwas über unseren Code. Was passiert, wenn wir eine dritte Abhängigkeit benötigen. Wir können nicht alle Aufrufe der Funktion bearbeiten. Also, wir brauchen ein Instrument, das das für uns tun wird. Genau das versuchen die Injektoren zu lösen.Lassen Sie uns einige Ziele aufschreiben, die wir erreichen wollen:

  • wir sollten Abhängigkeiten der Lage sein registrieren
  • der Injektor eine Funktion übernehmen sollte und eine Funktion zurück, die irgendwie die benötigten Ressourcen erhält
  • wir sollten nicht viel schreiben, brauchen wir kurze und nette Syntax
  • der Injektor den Umfang der bestandenen Funktion
  • die übergebene Funktion sollte in der Lage sein, um benutzerdefinierte Argumente zu akzeptieren, nicht nur die beschriebenen Abhängigkeiten
  • 012 halten soll

Eine nette Liste ist es nicht. Lassen Sie uns tauchen.

Verwandte Themen