Rails允许我们使用简单的类似宏的语法将方法委托给其他对象。但是,我对特定案件感到困惑。
如果我委托一个方法来获取一个对象,然后将另一个方法委托给那个新对象,它会违反demeter法吗?
例如,在Course
类
#course.rb
...
belongs_to :batch
...
它是Exam
类
#exam.rb
...
belongs_to :course
delegate :batch, to: :course
...
# access some batch's method like this
batch.name # which really is course.batch.name
这是违规行为吗?可能的解决方案是什么?
答案 0 :(得分:5)
我认为授权(甚至多级深度)并没有违反Law of Demeter,因为你实际上并没有在两个级别的单位上调用该方法。
委派改进松散耦合组件,因为您可以用方法替换单元中的委托并更改其实现,而不需要更改其他单元。
法律告诉你不要依赖外部对象的内部。可以通过适当的界面访问其值。该接口可能是 - 以最简单的形式 - 委托人。