得墨忒耳法 - 它真的只与朋友沟通吗?

时间:2015-08-19 10:49:31

标签: javascript class coding-style law-of-demeter

我读了一篇关于得墨忒耳法的文章,让我感到困惑。

它说明了这样的事情:

var width = mapControl.get_mapState().getMapRange().getSize().get_width();

应该替换为:

var mapState = mapControl.get_mapState();
var mapRange = mapState.get_mapRange();
var width = mapRange.get_width()

我在这里有点困惑,因为后者与第一个相同,但写的不同。在这两种情况下,我最终都访问“宽度”,这不是我当前班级的直接朋友。

那为什么第二种方式真的更好?

1 个答案:

答案 0 :(得分:1)

  

我在这里有点混淆,因为后者与第一个相同,但写的不同。在这两种情况下,我最终都会访问" width"这不是我现在班上的直接朋友。

     

那为什么第二种方式真的更好?

它并不是更好。 Demeter法则是重构代码,因此客户端代码如下所示:

var width = mapControl.get_width();

在这种情况下,客户端代码不需要知道mapControl具有"状态",其具有"范围",其宽度为"" #34 ;.它只需要知道它暴露了宽度"。