Закон Деметры гласит следующее:
- Каждый юнит должен иметь только ограниченные знания о других юнитах: только юниты, «тесно» относящиеся к текущему юниту.
- Каждый юнит должен разговаривать только со своими друзьями; не разговаривай с незнакомцами
- Поговорите только со своими непосредственными друзьями.
В C # 6.0 введен новый оператор, называемый нулевым условным оператором . ИМХО, это облегчает кодирование и улучшает читабельность. Но это также облегчает написание более связанного кода, так как легче перемещаться по полям класса, уже проверяя на ничтожность (что-то вроде var x = A?.B?.C?.D?.E?.F?
).
Правильно ли утверждать, что этот новый оператор противоречит Закону Деметры?
X.Y.Z.W.U
является нарушением «закона». Но, по моему опыту работы с кодом, 90% времени это просто уродливый код.
.?
больше не нарушает LoD чем +
или -
делает.
A?.B?.C?.D?.E?.F?
это нарушит его - LoD не о том, сколько точек, и если вызывающий метод имеет такую информацию о структуре, которая не нарушает его точек, такой вызов будет вполне приемлемым. Что такое код может нарушить LoD не достаточно , чтобы сказать , что все виды использования него делают нарушают Lod.