核心CS问题:设计图案中列出的伽马,等等,它(如果有的话)盖monkeypatching?此外,对于什么类问题是monkeypatching适当的应对子类?修补的错误在核心类库是一个,是否还有其他人吗?我听到很多斯图姆und突进有关monkeypatching在计算器,大部分的你似乎有很大的疑虑,但作为一个程序员,我真正喜欢的能力封泛位的功能性和将它们包括在我的目模式在轨道上。

采取thoughtbot-回形针,例如,为什么我会想想的子类,与monkeypatch的办法,今天存在?

谢谢, -埃里克

有帮助吗?

解决方案

我不认为monkeypatching是一个设计图案的核心类扩展的语言特征,他们似乎忽略。

关于其余的,看看杰夫*阿特伍德的看法 这篇文章在他的博客.

在他的(我的)认为最大的问题monkeypatching是,它可以使调试非常困难的,如果它修改现有的方法-我们人类不能跟踪所有"小段在这里和那里,"以及机做。子类建立更明确的分离。

所以我个人的规则monkeypatching是:

  • 如果您可以做它没有monkeypatching和它的工作确定,不使用monkeypatching.
  • 你可以添加新的方法上课,但是你不能修改现有的。
  • 做一个非常明显和明显的方式-即文件称为string_extensions.rb在您/lib,不隐藏/myvendor/模块/se。rb。
  • 应当本地;类别使用一个图书馆应当不受影响。

现在,你例如:回形针。

  • 据我所知,它增加了方法给你的Email类,但不改变现有的人
  • 你必须添加一个 has_attachment 指令的类使用回形针,否则他们不会受到影响。

这样更改的本地化和显而易见的(其实我觉得它管理 提高 调试:是更容易对我们人类来读 has_attachment 而不是的 class MyModel < Paperclip::ActiveRecordWithAttachment).

子类也是一个坏主意在这种情况下因为你不能使用回形针之外的另一个插件,使用的类-轨道是一继承。

在回形针的情况下,这显然是一个 has_a 关系与其附件,不是一个 is_a 一个。一个可以争辩说,它不会是一个适当的使用的子类化。

最后,我想指出,需要回形针子类在一些场合(你必须使用子类,以便创造一个回形针处理器)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top