迪米特法则(The Law of Demeter)

2019-06-27 16:54发布

我最近张贴在计算器的一个问题,我做了一件影响

@period_registration.period.event

然而,有人建议我做类似如下:

def event
  period.event
end

@period_registration.event

我一般意义的是,这似乎有点重手。 望着这以前的帖子我如何申请迪米特法则来呢? 展示了如何重手,如果你这样做是为了每一个关联这可以成为。

在轨这怎么一个做法的共同点是? 我的想法是,即使这是技术上做正确的事情,如果不是导轨文化的一部分,那么它似乎这样做将引发消费者望而却步。 而且,更重要的是,实际上使代码为其他开发商认为你是在浪费你的时间与所有这些辅助方法更少的维护。

比方说,我想这impliment,将@ period_registration.event.city,其中城市是事件的属性,而不是一个单独的对象也违反毁灭之王或者我需要写的另一种方法,所以我可以做的:@ period_registration.city

Answer 1:

说实话,俯首听命于迪米特法则是非常罕见的。 不过,对于联想,这是它有一个快捷方式,去除大部分的辛勤工作,从你这样一个共同的模式:

class PeriodRegistration < ActiveRecord::Base
  belongs_to :period
  delegate :event, :to => :period
end

PeriodRegistration.new.event # calls PeriodRegistration.new.period.event

你可以在阅读更多关于这个模块#委托文件。

在冠冕堂皇的过度自我推销的风险,我有一个博客帖子讨论这件事等方式来尽量尊重迪米特法则,如果那是你的事。 检查出来 ,如果你很好奇,以了解更多。



文章来源: The Law of Demeter