Urządzenie Law of Demeter wskazuje, że należy mówić tylko do obiektów, o których wiesz bezpośrednio. Oznacza to, że nie należy wykonywać połączeń łańcuchowych, aby rozmawiać z innymi obiektami. Gdy to zrobisz, tworzysz niewłaściwe powiązania z obiektami pośredniczącymi, nieprawidłowo coupling Twój kod na inny kod.Sprzężenie, spójność i prawo Demeter
To jest złe.
Rozwiązanie byłoby dla klasy, o której wiesz, że w zasadzie eksponuje proste opakowania, które delegują odpowiedzialność na obiekt, z którym ma związek.
To dobrze.
Ale wydaje się, że klasa ma niską wartość cohesion. Nie jest już po prostu odpowiedzialna za dokładnie to, co robi, ale ma również delegatów, którzy w pewnym sensie powodują, że kod staje się mniej spójny poprzez duplikowanie fragmentów interfejsu związanego z nim obiektu.
To jest złe.
Czy to naprawdę prowadzi do obniżenia spójności? Czy to mniejsze zło?
Czy jest to jeden z tych szarej strefy rozwoju, gdzie można debatować, gdzie jest linia, lub czy istnieją mocne, pryncypialne sposoby podejmowania decyzji, gdzie narysować linię i jakie kryteria można użyć do podjęcia tej decyzji ?
Podczas krótkiego tematu zdecydowanie polecam Ted Faisons "Programowanie oparte na zdarzeniach: podejmowanie wydarzeń do granic możliwości" [link] (http://books.google.co.uk/books?id=9CL446IzhuAC&pg=PA38&lpg= PA38 i dq = zdarzenia + rozdział + jeden + sprzężenie & źródło = bl & ots = qmJTOuCz90 & sig = EZKvZBjF8QmGohatC97HsmAqG0c & hl = en & ei = wj6tTqe5LcTX8gON_YyiCw & sa = X & oi = wynik_kolekcji & ct = wynik & resnum = 6 & ved = 0CEMQ6AEwBQ # v = onepage & q = events% 20chapter% 20one% 20coupling & f = false). Daje dobry podział na typowe problemy z połączeniem i daje dobry system dawania pomiaru ilości sprzężenia w danym systemie. –
W przypadku naruszenia LoD, to czy dodatkowe połączenia są ** "niewłaściwe" zależy od natury połączone klasy **: Jeśli są one bardzo widoczne (myślę Row, Column, Cell w implementacji Excela), sprzężenie z nimi jest bezproblemowe, a LoD jest nadmiernie restrykcyjna. Podobnie, jeśli omawiane klasy są celowo zwykłymi klasami danych z zasadniczo żadnym zachowaniem. –