"进攻式编程",指的是一种编程策略,它与传统的防御性编程策略(程序员负责防止或处理可能发生的错误和异常)不同。
在 Offense Programming 中,程序员会故意引入可控制的错误和异常,在实际运行过程中激活这些错误和异常,以验证系统的健壮性和错误处理能力。通过这种方式,可以提前暴露出软件中的漏洞和问题,使得程序员可以在早期就进行修复。
以下是进攻式编程策略的几个关键方面:
需要注意的是,虽然进攻式编程策略可以帮助提前发现问题,但在某些环境中可能并不适用,因为这可能会导致程序在生产环境中出错。因此,使用进攻式编程时需要谨慎考虑。
public void PrintStringOffensively(string input)
{
// Assume input should never be null or empty.
// If it is, something has gone wrong and we want to know about it.
Debug.Assert(!string.IsNullOrEmpty(input), "Input should not be null or empty!");
Console.WriteLine(input);
}
即防御性编程,是一种预防错误发生的编程策略。它的主要思想是:代码应该能够在预期之外的条件下也能正常运行,并且能够处理可能会出现的各种错误情况。
以下是防御性编程策略的几个关键方面:
public void PrintStringDefensively(string input)
{
// Check if input is null or empty
if (string.IsNullOrEmpty(input))
{
Console.WriteLine("Invalid input!");
return;
}
Console.WriteLine(input);
}
个人感受在编写业务代码时用到防御式编程思想会更多一点,为保证程序的高可用性。而在设计框架或者底层时则使用进攻式编程更多,参数不可用或非法会导致框架不能正常使用,但是对使用者会造成“到处报错”的感受。
https://programmingduck.com/articles/defensive-programming