В описании LOD, которое я видел (например, Wikipedia , C2 Wiki ), говорится о том, что не нужно вызывать методы. Цитировать Википедию:
Закон Деметры для функций требует, чтобы метод M объекта O мог вызывать только методы следующих типов объектов:
- О себе
- параметры М
- любые объекты, созданные / созданные в M
- Объекты прямого компонента O
- глобальная переменная, доступная O, в объеме M
Но как насчет доступа к свойствам, переменным или перечислениям? Например, учитывая это:
class FirstClass {
public SecondClass GetRelatedClass() {
return new SecondClass();
}
public enum InnerEnum {
Violated,
NotViolated
}
}
class SecondClass {
public int Property {get; set;}
public string _variable = "Danny Demeter";
}
Есть ли какие-либо / все эти нарушения LOD? (Пока не обращайте внимания на прямой доступ к переменной, если вы можете ..)
void Violate(FirstClass first) {
SecondClass second = first.GetRelatedClass();
var x = second.Property;
var y = second._variable;
var z = FirstClass.InnerEnum.Violated;
}
Я бы не стал делать первые два (будь то «официальные» нарушения или нет), хотя не совсем уверен насчет перечисления.