我一直认为防御性编程是邪恶的(而且我仍然这样做),因为根据我的经验,通常防御性编程总是涉及基于不可预测结果的某种不合理的牺牲。例如,我看到很多人试图对自己的同事进行防御性编码。他们会做“以防万一”代码稍后以某种方式改变。他们最终会以某种方式牺牲表现,或者他们会在所有情况下使用一些银弹。
这种具体的编码习惯,是否算作防御性编程?如果没有,这种做法会被称为什么?
维基百科将防御性编程定义为对软件不可预测的使用的防范,但并未指出针对其他程序员的代码完整性的防御性编程策略,因此我不确定它是否适用,也不是什么这叫做。
基本上我希望能够与那些做这件事的人争辩,并以专业的方式告诉他们他们在做什么是错的。我希望能够客观地反对这一点,因为它弊大于利。
答案 0 :(得分:2)
"过度设计"是错的。
"防御性编程"很好。
它需要智慧,经验......也许是经常进行代码审查的常规政策......来区分它们。
答案 1 :(得分:1)
这完全取决于细节。如果您正在为其他程序员开发软件以便重用,那么至少做一些防御性编程是有意义的。例如,您可以根据需要记录有关输入的要求,但有时您需要测试输入是否符合要求以避免灾难性行为(例如,销毁数据库)。这通常涉及(微不足道的)性能损失。
另一方面,防守可能过头了。也许这就是告诉你的观点。一个或两个具体的例子将有助于区分正在发生的事情。