demeter的定律也适用于属性吗?

时间:2012-12-22 21:34:39

标签: c# design-patterns law-of-demeter

demeter法则说对象不能从对象A调用对象B中的方法M. 但它也适用于物业吗?实施例

public class B{
     public bool IsValid();
}

public class A{
     public B B{get;set;}
}

我可以这样做吗?

var isValid = new A().B.IsValid()

或者我应该这样做:

public class B{
     public bool IsValid();
}

public class A{
     private B B{get;set;}

     public bool IsValid(){
          return B.IsValid();
     }
}

var result = new A().IsValid();

如果我从A?

访问B的方法,是否存在问题(根据法律规定)

1 个答案:

答案 0 :(得分:11)

是的,它也适用于属性,因为此代码的客户端:

var isValid = new A().B.IsValid();

A以及B相关联。

在确定Demeter违规法律时,您必须平衡脱钩的需要和明确区分责任的必要性。有时您可以创建Demeter变形器:具有太多不相关方法的类只是为了符合Demeter定律。

更新:可以在this post中找到Demeter变形器的示例:

  

例如,考虑一下那些试图与老板亲吻的人:sendFlowers(john.getManager().getSpouse())。在此处应用隐藏委托将在Employee中生成getManagersSpouse()方法。呸。