【发布时间】:2014-11-19 04:43:42
【问题描述】:
我昨天放假回来工作,在我们的每日站会中,我的队友提到他们正在重构我们的 java 代码中的所有模型对象,以删除所有 getter 和 setter,并将模型字段改为公共对象,调用德墨忒耳法则是这样做的原因,因为
为了便于我们遵守得墨忒耳定律:模块不应该知道它所操作的“对象”的内部结构。由于数据 结构不包含行为,它们自然会暴露其内部结构。所以在那种情况下,得墨忒耳不适用。
我承认我必须重新了解我对 LoD 的了解,但对于我这辈子来说,我找不到任何表明这符合法律精神的东西。我们模型中的 getter/setter 都不包含任何业务逻辑,这是他这样做的理由,因此这些对象的客户不必了解 get/set 方法中是否正在执行某些业务逻辑。
我认为这是对需要“对象结构的内部知识”意味着什么的误解,或者至少是过于字面理解并在此过程中打破了相当标准的惯例。
所以我的问题是,直接公开模型对象内部结构而不是通过 LoD 名称中的 getter/setter 公开是否真的有意义?
【问题讨论】:
-
听起来你的队友没有足够的工作要做。
-
是的,这就是问题所在......我们有大量工作要做,这是一个巨大的重构,涉及 100 个文件。我要反击,我只是想确保我拥有的不仅仅是“这是浪费时间”(虽然这应该足够了)
-
幸运的是,您没有使用 Groovy,其中
x.getStuff()和x.stuff无法区分(并且字段stuff在调用时甚至可能不存在......) -
@alexD:问题中的引述是从哪里得到的?
标签: java design-patterns law-of-demeter