Łączenie, uproszczone
Kiedy obiekt wywołuje metodę, właściwość itp. Innego obiektu, mówimy, że obiekty są sprzężone. Nazywamy to sprzężenie bo teraz wywoływany nie może zmienić nic o swoją własną metodę / propan. w. przerwanie dzwoniącego .
Zatem im bardziej metody sprzęgania, rekwizyty. - tym trudniej jest zmienić kod odbiorcy bez zerwania całego kodu, który go używa.
rozważanie sprzężenia
- Odwołując się nawet do jednego rekwizytu, metoda łączy dwa obiekty.
- Oczywiście sprzężenie jest konieczne do tworzenia oprogramowania.
- Biorąc pod uwagę charakter sprzężenia „krok blokady”, chcemy go zarówno ograniczyć, jak i odizolować. Ten cel jest po prostu zgodny z ogólnym oprogramowaniem. zasady
- Im mniej obiektów musimy rozmawiać, tym niższe jest sprzężenie.
- Jeśli muszę, powiedzmy, 20 różnych wywołań metod, sprzężenie jest niższe, jeśli wszystkie 20 wywołań dotyczy jednej klasy / obiektu, odwrotnie te same metody rozłożone na kilka klas / obiektów.
Większość Wiedzy powoduje szalone połączenie
Tutaj mamy coś Employee
, co Person
ma „adres”
public class Employee {
public Person me = new Person();
}
public class Person {
public Address home = new Address();
}
public class Address {
public string street;
}
Aby dostać się na ulicę Muszę zadzwonić: myEmployee.me.home.street
. Jest to 180 stopni sprzeczne z zasadą najmniejszej wiedzy. Muszę wiedzieć o wewnętrznych, struktury kompozytu, z Employee
, Person
i Address
klas.
Ten wadliwy projekt klasy zmusza mnie do znajomości wszystkich tych klas, a zatem myEmployee.me.home.street
łączy mnie (obiekt wywołujący) z co najmniej 3 klasami - aby uzyskać tylko jedną właściwość!
Najmniejsza wiedza ratuje dzień
Jeśli mówię tylko do Employee
klasy, stosuję zasadę najmniejszej wiedzy per se, robiąc to, automatycznie ograniczamy sprzężenie tylko do tej klasy, a jednocześnie izolujemy sprzężenie do tej jednej klasy.
Dodając wszystkie potrzebne właściwości w Employee
klasie, naprawiamy sprzęgło.
a zatem
public class Employee {
public Person me = new Person();
public string street { return me.home.street; }
}
Pozwala mi dzwonić: myEmployee.street
-
- Ja tylko „wiem”
Employee
- Jestem sprzężony tylko z
Employee
- bez względu na to, jak złożona jest jego struktura.
Najmniej wiedzy aż do samego końca
Oddzieliliśmy myEmployee od Person
i Address
, i najlepiej powinniśmy nadal stosować najmniejszą wiedzę, dodając właściwości przejścia przez takie, że Employee
tylko mówi się Person
i Person
tylko mówiAddress