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,所以我认为问题是我的.我错过了什么?我只是需要放松一下吗?你会怎么做? 解决方法
我认为它与猴子修补中的相同:它可以做到,但你必须确保首先没有替代品(即你不能使用你的界面修改类),其次,你必须非常明确它(确保文档,注释和接口提到我们的方法是必需的并将被调用)并抛出一个有用的错误消息,如果它不是
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |