铁路'多级授权违反了德米特法?

时间:2016-03-28 07:32:56

标签: ruby-on-rails ruby oop delegates

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

这是违规行为吗?可能的解决方案是什么?

1 个答案:

答案 0 :(得分:5)

我认为授权(甚至多级深度)并没有违反Law of Demeter,因为你实际上并没有在两个级别的单位上调用该方法。

委派改进松散耦合组件,因为您可以用方法替换单元中的委托并更改其实现,而不需要更改其他单元。

法律告诉你不要依赖外部对象的内部。可以通过适当的界面访问其值。该接口可能是 - 以最简单的形式 - 委托人。