作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近在 stackoverflow 上发布了一个问题,我做了一些事情来影响
@period_registration.period.event
但是,有人建议我执行以下操作:
def event
period.event
end
@period_registration.event
我的总体感觉是,这似乎有点过分。查看之前的帖子 How do I apply the Law of Demeter to this?显示了如果您对每个协会都这样做,这会变得多么严厉。
这种做法在 Rails 中有多常见?我的想法是,即使这在技术上是正确的做法,但如果它不是 Rails 文化的一部分,那么这样做似乎会让人们失望。而且,更重要的是,实际上降低了代码的可维护性,因为其他开发人员认为您在使用所有这些辅助方法是在浪费时间。
假设我想实现这一点,@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 阅读更多相关信息文档。
冒着过度 self 推销的风险,我有一篇博文讨论了这个和其他尝试尊重得墨忒耳法则的方法,如果你喜欢的话。 Check it out如果您想了解更多信息。
关于ruby-on-rails - 得墨忒耳法则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12237431/
我是一名优秀的程序员,十分优秀!