为什么框架和这样的弃用函数而不仅仅是更新它们?

时间:2013-01-30 04:34:31

标签: php jquery mysql frameworks deprecated

例如,jQuery的.live()已被弃用,而我们必须使用.on()而对于MySQL,mysql_*很快就会被弃用并转移到其他地方...更多值得注意的是...... mysqli

为什么框架和编程语言会弃用旧函数而不仅仅是更新它们?对不起,如果这是在错误的地方。如果是,请告诉我应该在哪里发帖。

7 个答案:

答案 0 :(得分:3)

当功能的设计发生变化时,他们希望提供一段时间来提供旧功能和新功能(转换时间),然后在将来某个日期,旧版本将被删除。如果它们为新行为保留相同的名称,则无法执行此操作。 .live().on()采用不同的论点,并以不同的方式工作。 .on()功能更强大,如果需要可以模拟.live(),但如果不更改调用代码则两者不兼容。

使用新行为引入新功能还简化了文档过程,因为它完全清楚记录了哪些行为(通过它所写的名称)。

并且,当旧代码包含不再支持旧方式的最新版本时,更清楚的是,当.live()不存在时,事情不起作用,而不是存在时,但是行为不对。

而且,.live()这样的旧行为最终会从代​​码中删除,因为它们是一种糟糕的做事方式(可能导致效率显着低下),因此jQuery希望每个人最终都停止使用它们。从未来的版本中删除它是一种强制它的使用下降并最终消失的方法。过渡期为开发人员提供了大量时间来了解变​​更和实施/测试变更的必要性。

答案 1 :(得分:0)

答案很简单。当一个人更新他们的软件版本。为什么他们已编码的所有内容都会破坏?当事情被弃用时,它们不仅可以修复安全漏洞,还可以改变应该使用的方式。

答案 2 :(得分:0)

通常会弃用某些东西,以便人们知道不要使用它们,以便他们知道在将来的某个时刻它们将不复存在。然而,与此同时,弃用意味着他们可以在不破坏旧代码的情况下继续进行语言/框架开发。

答案 3 :(得分:0)

从Oracle的Java documentation

中查看此信息
  

希望用户迁移到新API的有效理由包括: - 旧API不安全,错误或效率低 - 旧API在将来的版本中消失 - 旧的API鼓励非常糟糕的编码实践< / p>

答案 4 :(得分:0)

所有人都尊重所有框架和语言.. 这就是为什么弃用发生的原因..

1-哎呀,我到底在想什么!

我很想考虑这个方法被弃用的主要原因之一。 在某些时候曾经制作过php / jquery或者计算机出错了,解决这个错误的唯一方法就是提供其他解决方案..

最好的例子是mysql_

2-你不能让每个人都进入你的新功能.. 让我们说例如我喜欢键入.live因为它感觉更自然,所以不是打破我用jquery库构建的所有内容,他们会告诉我它很糟糕然后他们创造了更好的东西,最后他们将弃用旧功能..

3-我不想犯同样的错误,所以只是为了看起来更酷,我会给ppl时间测试新功能,他们会告诉我是否有任何错误..我不想修复一个与其他人的错误

4-最重要的是核心变化和新思维。

这就是我思考它的方式..确定每种方法都被弃用有其自身的原因..但让我们面对它,他们知道他们做得比我们做得更好。

答案 5 :(得分:0)

mysql_query是默认情况下危险的界面。如果不打破围绕它构建的每个应用程序,就无法更新它,因此最好的计划是退出它。没有它,世界真的会变得更好。

虽然框架应该尽一切可能促进向后兼容性,但有时候丢弃功能会帮助平台更快地前进或变得更加一致。

我不确定为什么jQuery会丢弃live(),但有时候这样的功能很难支持,或者与API的其他元素有明显的功能重叠。请记住,jQuery不仅是一个框架,而且还需要非常小心代码大小。核心库中每增加一千字节的代码就会导致额外的 TB级数据通过互联网下载。当你添加东西时,必须要做的事情。

为什么Linux内核drop support for the 80386?这是因为维护您不想要的功能会消耗您想要的功能。

答案 6 :(得分:0)

在发布过程中必须有一个步骤,允许同意兼容已弃用的功能及其替换(如.live.on)。如果此步骤不存在且{{ 1}}被替换为立即具有.live的功能,任何依赖于.on的旧行为且想要更新到下一版本的人都必须处理完全破坏的代码,这将是更难。

其他原因是后端的两个API之间缺乏兼容性。对于.liveext/mysql相比,这可能适用于mysqli.live对比.on(可能具有相似且更小的后端)。 mysqliPDO已经存在了很长时间,并且作为独立于ext/mysql的项目开始,可能由不同的人维护(我假设如此)。最终,mysqli / PDO在与ext/mysql分开开发后被引入到php核心中。这些中的任何一个的背部和前端都不接近兼容。

我认为你没有具体说明为什么他们要摆脱.live / ext/mysql(你似乎明白他们是低等的),但至少PHP有关于它的常见问题解答:http://www.php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated