加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

rubyists是否会参考mixins的访问者?

发布时间:2020-12-17 01:58:40 所属栏目:百科 来源:网络整理
导读:从mixin方法中引用扩展对象上的访问器被认为是不好的做法吗?一个简单的例子: module WindInstrument def play mouthpiece.blow #requires a mouthpiece endendclass Saxophone attr_reader :mouthpiece def initialize @mouthpiece = Mouthpiece.new end i
从mixin方法中引用扩展对象上的访问器被认为是不好的做法吗?一个简单的例子:

module WindInstrument
  def play
    mouthpiece.blow  #requires a mouthpiece
  end
end

class Saxophone
  attr_reader :mouthpiece

  def initialize
    @mouthpiece = Mouthpiece.new
  end

  include WindInstrument
end

Saxophone.new.play

在这种情况下,我实际上只是将喉舌的需求直接移到WindInstrument模块,但是在更复杂的场景中,访问者在扩展对象上生活真的有意义吗?这只是一个不恰当的关注点分离的问题吗?

Mixins对于添加不需要了解扩展对象状态的封装行为非常有用.事实上,我的直觉告诉我,mixin不应该知道任何状态,无论如何.如果它需要国家知识,我通常会回到以下两种选择之一:

>将状态放在类中,并通过组合而不是通过继承层次结构添加它.我的问题是,我知道rubyists正在创建访问状态的mixins,这使得更具可读性,如果不那么直观(对我而言)设计.
>将咬嘴作为参数传递给模块.即使我可以说这似乎使设计变得混乱,并且在ruby世界观中感觉像是令人厌恶.

这段代码是否打扰了其他人?我知道有很多聪明的人在那里使用ruby,所以我认为问题是我的.我错过了什么?我只是需要放松一下吗?你会怎么做?

解决方法

我认为它与猴子修补中的相同:它可以做到,但你必须确保首先没有替代品(即你不能使用你的界面修改类),其次,你必须非常明确它(确保文档,注释和接口提到我们的方法是必需的并将被调用)并抛出一个有用的错误消息,如果它不是

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读