Prawo Demeter stwierdza co następuje:
- Każda jednostka powinna mieć ograniczoną wiedzę na temat innych jednostek: tylko jednostki „ściśle” związane z bieżącą jednostką.
- Każda jednostka powinna rozmawiać tylko z przyjaciółmi; nie rozmawiaj z nieznajomymi.
- Rozmawiaj tylko z najbliższymi przyjaciółmi.
W C # 6.0 wprowadzono nowy operator o nazwie operator null-warunkowy . IMHO ułatwia kodowanie i poprawia czytelność. Ale ułatwia także pisanie bardziej sprzężonego kodu, ponieważ łatwiej jest poruszać się po polach klas, sprawdzając już pod kątem nieważności (coś podobnego var x = A?.B?.C?.D?.E?.F?
).
Czy słusznie jest stwierdzić, że ten nowy operator jest niezgodny z prawem Demetera?
X.Y.Z.W.U
naruszenie „prawa”. Ale z mojego doświadczenia związanego z kodem, 90% czasu jest po prostu brzydko sprzężonym kodem.
.?
Nie więcej niż jest niezgodny LoD +
czy -
nie.
A?.B?.C?.D?.E?.F?
by go naruszyło - LoD nie polega na tym, ile kropek i jeśli metoda wywołująca zawiera takie informacje o strukturze, która nie narusza jej punktów, takie wywołanie byłoby całkowicie akceptowalne. Że taki kod mogłoby naruszać LoD nie wystarczy powiedzieć, że wszystkie zastosowania nim zrobić naruszać LOD.