2

我一直认为防御性编程是邪恶的(现在仍然如此),因为根据我的经验,防御性编程通常总是涉及基于不可预测结果的某种不合理的牺牲。例如,我见过很多人尝试对自己的同事进行防御性编码。他们会做一些事情“以防万一”代码稍后以某种方式发生变化。他们最终会以某种方式牺牲性能,或者他们会在所有情况下都求助于一些灵丹妙药。

这种特定的编码实践,算不算防御性编程?如果不是,这种做法会被称为什么?

维基百科将防御性编程定义为对不可预测的软件使用的保护,但并未指出针对其他程序员的代码完整性的防御性编程策略,所以我不确定它是否适用,也不知道这叫什么。

基本上,我希望能够以专业的方式与这样做的人争论并告诉他们他们所做的事情是错误的。我希望能够客观地反对这一点,因为它弊大于利。

4

2 回答 2

2

“过度工程”是错误的。

“防御性编程”很好。

这需要智慧、经验……也许还有经常进行代码审查的常设政策……来区分。

于 2012-02-05T04:33:51.280 回答
1

这一切都取决于具体情况。如果您正在开发软件供其他程序员重用,那么至少做一点防御性编程是有意义的。例如,您可以随心所欲地记录有关输入的要求,但有时您需要测试输入是否真正符合要求以避免灾难性行为(例如,破坏数据库)。这通常涉及(微不足道的)性能损失。

另一方面,防守可能是过度的。也许这就是你的观点。一两个具体的例子将有助于区分正在发生的事情。

于 2012-02-05T04:31:14.510 回答