美文网首页
alias_method_chain

alias_method_chain

作者: will2yang | 来源:发表于2019-11-05 23:19 被阅读0次

    这个方法已经没有了,在看rails5.1+的源码里,但是还是记录一下这些方法演变的过程。

    alias_method_chain产生的原因

    因为给原方法增加新功能的想法在Rails中十分普遍。
    传入 target(需要被包装的方法), feature(希望添加的特性名)。就会定义target_without_feature和target_with_feature的方法,且保持原方法相同的可见性。

    回顾validations模块

    在早期的ActiveRecord::Validations里: save和save!就被这样的方式包装上了validation的特性。

    alias_method_chain方法的衰亡

    像这样的方式,通常会污染你的类,可能会破坏以后的代码。更糟糕的是你难以追踪真正调用方法的是哪个版本。

    通过重写加super的方式能更为干净的达到效果,虽然并没有很酷炫。

    Module#prepend

    通过prepend的方式,修改祖先链的顺序,在prepend的模块里可以复写super来修改增加功能。在需要处理一些想要修改却不太好修改的库时,这将会变得很方便,比如Rails中的一个类库。

    相关文章

      网友评论

          本文标题:alias_method_chain

          本文链接:https://www.haomeiwen.com/subject/trhybctx.html