得墨忒耳定律

我最近在stackoverflow上发布了一个问题,我做了一些有用的事情

@period_registration.period.event

但是,有人建议我做以下事情:

 def event period.event end @period_registration.event 

我的一般意义是,这似乎有点严厉。 查看此前发布的内容如何将Demeter法应用于此? 显示如果你为每个协会做这件事,这会变得多么重。

在铁轨中这种做法有多常见? 我的想法是,即使这在技术上是正确的,但如果它不是铁杆文化的一部分,那么这样做似乎会让人们失望。 而且,更重要的是,实际上使代码不易维护,因为其他开发人员认为你在浪费时间使用所有这些辅助方法。

假设我想表达这个,请@ period_registration.event.city,其中city是事件的属性,而不是单独的对象也违反了LoD,或者我需要编写一种方法,所以我可以这样做:@ period_registration.city

说实话,对得墨忒耳法的严格遵守是非常罕见的。 但是,对于协会来说,这是一种常见的模式,它有一条捷径可以消除你的大部分辛勤工作:

 class PeriodRegistration < ActiveRecord::Base belongs_to :period delegate :event, :to => :period end PeriodRegistration.new.event # calls PeriodRegistration.new.period.event 

您可以在Module#delegate文档中阅读更多相关信息。

冒着过度自我推销的风险,我有一篇博客文章讨论了这个以及其他方法,试图尊重得墨忒耳法则,如果这是你的事情。 如果您想要了解更多, 请查看它 。