Закон Деметри говорить наступне:
- Кожен підрозділ повинен мати лише обмежені знання про інші підрозділи: лише одиниці, "тісно" пов'язані з поточним підрозділом.
- Кожен підрозділ повинен спілкуватися лише зі своїми друзями; не розмовляйте з незнайомцями.
- Поговоріть лише зі своїми найближчими друзями.
C # 6.0 представив нового оператора, який називається оператором з нульовими умовами . IMHO, це полегшує кодування та покращує читабельність. Але це також полегшує написання більш зв'язаного коду, так як легше пересуватися по полях класу, вже перевіряючи наявність недійсності (щось подібне var x = A?.B?.C?.D?.E?.F?
).
Чи правильно стверджувати, що цей новий оператор суперечить Закону Деметера?
X.Y.Z.W.U
є порушенням "закону". Але, з мого досвіду роботи з кодом, 90% випадків це просто некрасивий зв'язаний код.
.?
більше не порушує LoD ніж +
або -
робить.
A?.B?.C?.D?.E?.F?
це порушило б - LoD - це не про те, скільки точок і якщо метод виклику має таку інформацію про структуру, яка не порушує його пункти, такий виклик був би цілком прийнятним. Що таке код може порушити LoD мало , щоб сказати , що всі види використання нього роблять порушують Lod.