alias_method_chain

这个方法已经没有了,在看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中的一个类库。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容