Kupplung, vereinfacht
Wenn ein Objekt eine Methode, eine Eigenschaft usw. eines anderen Objekts aufruft, sagen wir, dass die Objekte gekoppelt sind. Wir nennen es Kopplung, weil der Angerufene jetzt nichts an seiner eigenen Methode / Stütze ändern kann . ohne den Anrufer zu unterbrechen .
Je mehr also die Kopplungsmethoden, Requisiten. - Je schwieriger es ist, den Code eines Angerufenen zu ändern , ohne den gesamten Code zu beschädigen , der ihn verwendet.
über eine Kopplung nachdenken
- Wenn auf eine einzelne Eigenschaft verwiesen wird, koppelt die Methode zwei Objekte.
- Offensichtlich ist eine Kopplung zum Erstellen von Software erforderlich.
- In Anbetracht der Sperrstufe der Kopplung möchten wir diese sowohl begrenzen als auch isolieren. Dieses Ziel geht einfach mit der allgemeinen Softwareentwicklung einher. Prinzipien.
- Je weniger Objekte wir ansprechen müssen, desto geringer ist die Kopplung.
- Wenn ich zum Beispiel 20 verschiedene Methodenaufrufe machen muss, ist die Kopplung geringer, wenn alle 20 Aufrufe auf eine Klasse / ein Objekt gerichtet sind, und dieselben Methoden, die auf mehrere Klassen / Objekte verteilt sind.
Das meiste Wissen verursacht eine verrückte Kopplung
Hier haben wir eine Employee
, die eine Person
hat, die eine "Adresse" hat
public class Employee {
public Person me = new Person();
}
public class Person {
public Address home = new Address();
}
public class Address {
public string street;
}
Um die Straße zu bekommen muss ich nennen: myEmployee.me.home.street
. Dies ist das 180-Grad-Gegenteil des Prinzips des geringsten Wissens. Ich muss wissen , über die Interna, die Verbundstruktur, der Employee
, Person
und Address
Klassen.
Dieses fehlerhafte Klassendesign zwingt mich , über all diese Klassen Bescheid zu wissen , und myEmployee.me.home.street
koppelt mich (das aufrufende Objekt) daher mit nicht weniger als 3 Klassen - um nur eine einzige Eigenschaft zu erhalten!
Wenig Wissen rettet den Tag
Wenn ich nur mit der Employee
Klasse spreche, wende ich das Prinzip des geringsten Wissens per se an. Auf diese Weise beschränken wir die Kopplung automatisch auf nur diese Klasse und isolieren gleichzeitig die Kopplung auf diese eine Klasse.
Durch Hinzufügen aller benötigten Eigenschaften in der Employee
Klasse wird die Kopplung behoben.
somit
public class Employee {
public Person me = new Person();
public string street { return me.home.street; }
}
Erlaubt mir anzurufen: myEmployee.street
-
- Ich weiß nur
Employee
- Ich bin nur gekoppelt
Employee
- egal wie komplex seine Struktur ist.
Wenig Wissen bis zum Ende
Wir haben myEmployee von Person
und entkoppelt Address
, und im Idealfall sollten wir weiterhin das geringste Wissen anwenden, indem wir Pass-Through- Eigenschaften hinzufügen , mit denen Employee
nur Person
und Person
nur gesprochen wirdAddress