- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我看到的 LOD 描述(例如 Wikipedia 、 C2 Wiki )谈论不调用方法。引用维基百科:
The Law of Demeter for functions requires that a method M of an object O may only invoke the methods of the following kinds of objects:
- O itself
- M's parameters
- any objects created/instantiated within M
- O's direct component objects
- a global variable, accessible by O, in the scope of 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;
}
我不会做前两个(无论是否“官方”违规),尽管对枚举不太确定。
最佳答案
我无法回答枚举问题——我似乎记得标准建议是不要在类内部定义枚举。
对于属性,您实际上可以将属性视为方法(getProperty()
和setProperty(value)
)的快捷方式。在这种情况下,您的答案是属性访问是违规行为。
对于字段(变量),再一次,通常的做法是不公开它们而是使用属性,真正公开字段是违反封装的。
但最终,Demeter 法则的目的是限制类之间实现的知识。对我来说,这意味着您的所有示例都是违规行为。
关于c# - 得墨忒耳法则只适用于方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3989629/
我是一名优秀的程序员,十分优秀!