Kann jemand den genauen Unterschied zwischen loser Kopplung und enger Kopplung im objektorientierten Paradigma beschreiben?
Eine enge Kopplung liegt vor, wenn eine Gruppe von Klassen in hohem Maße voneinander abhängig ist.
Dieses Szenario tritt auf, wenn eine Klasse zu viele Verantwortlichkeiten übernimmt oder wenn ein Anliegen auf viele Klassen verteilt ist, anstatt eine eigene Klasse zu haben.
Lose Kopplung wird durch ein Design erreicht, das die Einzelverantwortung und die Trennung von Belangen fördert.
Eine lose gekoppelte Klasse kann unabhängig von anderen (konkreten) Klassen konsumiert und getestet werden.
Schnittstellen sind ein leistungsfähiges Werkzeug für die Entkopplung. Klassen können über Schnittstellen und nicht über andere konkrete Klassen kommunizieren, und jede Klasse kann am anderen Ende dieser Kommunikation stehen, indem sie einfach die Schnittstelle implementiert.
Beispiel für enge Kopplung:
class CustomerRepository
{
private readonly Database database;
public CustomerRepository(Database database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer", CustomerName);
}
}
class Database
{
public void AddRow(string Table, string Value)
{
}
}
Beispiel für eine lose Kopplung:
class CustomerRepository
{
private readonly IDatabase database;
public CustomerRepository(IDatabase database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer", CustomerName);
}
}
interface IDatabase
{
void AddRow(string Table, string Value);
}
class Database : IDatabase
{
public void AddRow(string Table, string Value)
{
}
}
Ein weiteres Beispiel hier.
Im objektorientierten Design bezieht sich das Ausmaß der Kopplung darauf, wie sehr das Design einer Klasse vom Design einer anderen Klasse abhängt. Mit anderen Worten: Wie oft erzwingen Änderungen in Klasse A entsprechende Änderungen in Klasse B? Enge Kopplung bedeutet, dass sich die beiden Klassen häufig gemeinsam ändern, lose Kopplung bedeutet, dass sie weitgehend unabhängig sind. Im Allgemeinen wird eine lose Kopplung empfohlen, weil sie einfacher zu testen und zu warten ist.
Vielleicht finden Sie dieses Papier von Martin Fowler (PDF) hilfreich.
Lose Kopplung ist die Antwort auf hart kodierte Abhängigkeiten im alten Stil und damit verbundene Probleme wie häufige Neukompilierung bei Änderungen und Wiederverwendung von Code. Der Schwerpunkt liegt auf der Implementierung der Arbeitslogik in Komponenten und der Vermeidung von lösungsspezifischem, verdrahtetem Code.
Lose Kopplung = IoC Siehe dies für eine einfachere Erklärung.