- 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/
在 SO解释了为什么像 scalaz、cats (Scala) 或 Arrow (Kotlin) 中的 Validation 不能是 monad。 据我所知,这是因为他们已经根据应用仿函数对 mona
给定例如像 这样的类型 data Tree a = Branch (Tree a) (Tree a) | Leaf a 我可以轻松地为 Functor、Applicative、
从这里引用:https://en.wikipedia.org/wiki/Law_of_Demeter More formally, the Law of Demeter for functions r
以下代码打破了 Law of Demeter : public class Student extends Person { private Grades grades; public Stu
我有一个简单的 Store 类,其中包含一个 Inventory。 Inventory 包含一个 Item 列表。为了修改 Inventory 中的其中一个 Item,我必须这样写: Store st
public class BigPerformance { public decimal Value { get; set; } } public class Performance
当我需要多态行为时,我经常发现自己在 C++ 中使用唯一指针。我通常实现如下所示的纯抽象类: class A { public: virtual A* clone() const = 0; /
5 规则指出,如果一个类有一个用户声明的析构函数、复制构造函数、复制赋值构造函数、移动构造函数或移动赋值构造函数,那么它必须有其他 4 个。 但今天我突然明白了:你什么时候需要用户定义的析构函数、复制
编译器或库的更“ native ”部分(IO 或可以访问黑魔法和实现的函数)是否对这些定律做出假设?打破它们会导致不可能的事情发生吗? 或者它们只是表达了一种编程模式——也就是说,你唯一会因为破坏它们
我有点想用 Java 8 流编写 Selenium 页面对象,如下面的代码所述,并收到评论说我的代码违反了 Demeter 法则,因为我在一行中执行了很多操作。我被建议将代码分解为第一个流以收集列表并
我对如何避免一对多关联违反得墨忒耳法则感到困惑。假设我有一个这样的模型: class Organization < ActiveRecord::Base has_one :address ha
如果我有一个对象的 ArrayList,那么任何时候我需要调用 ArrayList 成员的任何方法时,我都需要这样做: list.get(i).doSomething(); 这看起来很可疑地违反了 D
我在我的 Purescript 代码中广泛使用了来自库和我自己的类型类。每个类型类法则似乎都提供了一个很好的测试。目前,我正在为每个类(class)和法律单独编写测试。有没有办法部分自动化?也许像 H
我看到提到过 ListT is a classic example of a buggy monad transformer that doesn't satisfy the monad laws.
当我审查一些代码时,我看到了这个片段。 List users = /* Some code that initializes the list */; users.stream() .fil
我是一名优秀的程序员,十分优秀!