首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"monkeypatching“背后的正式设计模式是什么?

"monkeypatching“背后的正式设计模式是什么?
EN

Stack Overflow用户
提问于 2009-12-03 07:07:26
回答 1查看 167关注 0票数 0

这里的核心CS问题: Gamma等中列出的设计模式中,哪些(如果有)涵盖了monkeypatching?此外,对于哪类问题,monkeypatching和子类化是合适的吗?修补核心库类中的bug就是其中之一,还有其他的吗?我听说了很多关于在stackoverflow上进行monkeypatching的文章,你们中的大多数人似乎对此有强烈的疑虑,但作为一名程序员,我真的很喜欢封装泛型功能并将它们包含在我的rails对象模型中的能力。

以thoughtbot-曲别针为例,为什么我想要将其子类化,而不是现在存在的monkeypatch方法?

谢谢,-Eric

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-04 08:01:35

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

关于其余的,看看Jeff Atwood对this article on his blog的看法。

在他(和我)的观点中,monkeypatching最大的问题是,如果它修改了现有的方法,它会使调试变得非常困难--我们人类不能像机器一样跟踪所有“到处都是的小片段”。子类建立了更清晰的分隔。

所以我个人关于monkeypatching的规则是:

  • 如果您可以在不使用monkeypatching的情况下完成此操作,并且可以正常工作,则不要使用monkeypatching.
  • You可以将新方法添加到类中,但您不能修改现有方法。
  • 以一种非常明显的方式执行此操作-即,在您的供应商中有一个名为string_extensions.rb的文件,而不是在隐藏的/mymonkeypatching.
  • You/submodule/se.rb上。
  • 应该是本地的;不使用库的类应该不受影响。

现在,让我们举个例子:回形针。

据我所知,它会将方法添加到ActiveRecord类中,但不会修改现有的方法。

  • 您必须向使用回形针的类添加has_attachment指令,否则它们不会受到影响。

因此,这些变化是本地化的和明显的(我实际上认为它设法改进了调试:对于我们人类来说,阅读has_attachment比阅读class MyModel < Paperclip::ActiveRecordWithAttachment更容易)。

在这种情况下,子类化也不是一个好主意,因为除了使用子类的另一个插件之外,你不能使用回形针-- rails是单继承的。

在回形针的例子中,它与附件显然是一种has_a关系,而不是is_a关系。有人可能会争辩说,这不是子类化的正确使用。

最后,我想指出的是,在某些情况下,回形针需要子类化(您必须使用子类化才能创建回形针处理器)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1836520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档