1

我听说过很多关于猴子补丁如何如此酷或者猴子补丁是地球上最糟糕的事情的声音。我的想法是,如果您编写一些代码然后其他人更改其功能以执行其他操作,这并不好。但我正在寻找一个具体的例子来说明这可能会真正伤害到你。我的意思是,我一直在编写代码,然后我的同事对其进行更改。那么,monkey patching 与此有何不同?可能发生的最坏情况是什么?

4

4 回答 4

9

编程已经从需要了解全局状态以了解本地行为的编码实践缓慢但稳定地移动。一些例子:

  • Gotos 使推理控制流变得更加困难,因为您可能需要查看远处的代码才能了解如何到达特定行。
  • 全局变量也不受欢迎,因为程序的任何部分都可以更改影响任何其他部分的状态。
  • 支持函数式编程是因为这意味着您无需担心函数之外的任何状态即可了解其行为方式。

猴子补丁意味着如果不查看程序中的每一行代码,就无法知道一行代码做了什么。快速完成某事可能很有用,但它会使大型程序无法理解。由于这么多大程序都是从小程序开始的,猴子补丁可能是你想摆脱的习惯。

于 2009-03-30T21:59:34.093 回答
4

猴子修补从对象的其余部分和对象的文档中隐藏对对象的更改。使用该对象非常容易,检查它的文档以确保它符合您的期望,然后发现它并不能以这种方式工作。

如果您从事的项目会出现开发人员流失,这尤其糟糕,您需要更多地担心如何让新开发人员跟上您的代码库的速度。新开发人员不会意识到补丁的细微差别,因此您将很难从中获得好的代码。

至于可能发生的最坏情况,如果您的应用程序出现错误,可能发生的最坏情况是什么?有人会因为一件设备功能不正确而死吗?您是否可以通过向他们发送错误的账单或向他们的账户收取过多费用来破坏他们的信用评级?

于 2009-03-30T21:46:13.733 回答
1

这取决于环境,即您是否与其他人共享代码。不过,考虑一下可以在 Smalltalk 中完成的事情:改变+运算符的含义。如果我引入一个+函数,比如说,从另一个参数中减去一个参数,事情就会以华丽和意想不到的方式发生。

于 2009-03-30T21:47:02.280 回答
0

嗯,这真的取决于你的意思......

如果你写了一些代码然后其他人改变了它的功能来做其他事情,那就不好了

有什么要求?现在和以前都一样。如果需求已经改变并且生成的代码集必须改变,这称为维护或增强。我很少能在现实世界中遇到“猴子补丁”有效的一段代码,尽管它也严重依赖于谁编写了代码,多久以前等。太多的变量无法给出真正有效的答案. 简而言之,如果您需要做的就是在客户想要的时候为他们提供他们想要的东西,那么这可能是一个很好的“哦,最好这样做”。这完全取决于您的观众。

于 2009-03-30T21:51:26.747 回答