Kann jemand den genauen Unterschied zwischen loser Kopplung und enger Kopplung im objektorientierten Paradigma beschreiben?
Antworten
Zu viele Anzeigen?Es gibt bestimmte Tools, die durch ihre Bibliothek eine Abhängigkeitsinjektion bieten, zum Beispiel haben wir in .net ninject Bibliothek .
Wenn Sie weiter in Java gehen, dann Feder bietet diese Möglichkeiten.
Lose gekoppelte Objekte können durch die Einführung von Schnittstellen in Ihrem Code erstellt werden, das ist, was diese Quellen tun.
In Ihrem Code schreiben Sie beispielsweise
Myclass m = new Myclass();
Diese Aussage in Ihrer Methode besagt, dass Sie abhängig sind von myclass
wird dies als eng gekoppelt bezeichnet. Wenn Sie nun eine Konstruktorinjektion oder eine Eigenschaftsinjektion anbieten und ein Objekt instanziieren, wird es lose gekoppelt.
Es geht um Klassen Abhängigkeitsquote zu einer anderen, die bei loser Kopplung so niedrig und bei enger Kopplung so hoch ist. Um es klar zu sagen, in der serviceorientierte Architektur Dienste sind lose aneinander gekoppelt gegen monolithische welche Klassen in Abhängigkeit zueinander stehen, ist beabsichtigt
Lose Kopplung ist die Antwort auf hart kodierte Abhängigkeiten im alten Stil und damit verbundene Probleme wie häufige Neukompilierung, wenn sich etwas ändert, und Wiederverwendung von Code. Der Schwerpunkt liegt auf der Implementierung der Arbeitslogik in Komponenten und der Vermeidung von lösungsspezifischem, verdrahtetem Code.
Lose Kopplung = アイオーシー Siehe cette zur leichteren Erklärung.
Wenn die Erstellung/Existenz eines Objekts von einem anderen Objekt abhängt, das nicht angepasst werden kann, spricht man von enger Kopplung. Wenn die Abhängigkeit angepasst werden kann, spricht man von loser Kopplung. Betrachten wir ein Beispiel in Java:
class Car {
private Engine engine = new Engine( "X_COMPANY" ); // this car is being created with "X_COMPANY" engine
// Other parts
public Car() {
// implemenation
}
}
Der Kunde von Car
Klasse kann eine mit NUR "X_COMPANY"-Motor erstellen.
Ziehen Sie in Erwägung, diese Kopplung zu unterbrechen, wenn Sie die Möglichkeit haben, dies zu ändern:
class Car {
private Engine engine;
// Other members
public Car( Engine engine ) { // this car can be created with any Engine type
this.engine = engine;
}
}
Nun, ein Car
ist nicht abhängig von einer Engine von "X_COMPANY", da sie mit Typen erstellt werden kann.
Eine Java-spezifische Anmerkung: Die Verwendung von Java-Schnittstellen nur um der Entkopplung willen ist kein angemessener Entwurfsansatz. In Java hat eine Schnittstelle einen Zweck - sie soll als Vertrag fungieren, der zwangsläufig ein Entkopplungsverhalten bzw. -vorteil bietet.
Der Kommentar von Bill Rosmus in der akzeptierten Antwort enthält eine gute Erklärung.