程序防御性设计直接影响到程序的稳定性,稳定的程序可以在程序异常的情况下,跳过本次作物,尽可能保证程序运作,而不是直接弹出个窗口随之崩溃掉,
对于服务器而言7*24小时运行是基本要求了,所以防御性设计必须非常完备,一切功能都是以保证自身正常运行的基础上进行的,如果本次操作导致异常,那么会输出日志并跳过本次操作
那么对于客户端是不是也需要这样设计呢,程序当然是越健壮越好,但是比如下面的情况:
class A;
class B
{
A *pA; // 这个指针被new出来的时候可以保证是有效的
};
B* g_B;
class C;
C::Func()
{
A* pa = g_B->GetA();
if( pa ) dosth(); // 这里做了防御性检测
else LOG();
}
因为class B中的指针 pA 被创建的时候可以保证是有效的,那么在class C中使用是不是可以省略 if(pa)这个防御性检测,当然如果只是这一个地方使用到,加上防御性检测当然是最好,但是如果很多很多个地方都需要 A* pa = g_B->GetA(); 这样的操作,每一处都加上防御性判断是不是有必要呢?
对于服务器而言7*24小时运行是基本要求了,所以防御性设计必须非常完备,一切功能都是以保证自身正常运行的基础上进行的,如果本次操作导致异常,那么会输出日志并跳过本次操作
那么对于客户端是不是也需要这样设计呢,程序当然是越健壮越好,但是比如下面的情况:
class A;
class B
{
A *pA; // 这个指针被new出来的时候可以保证是有效的
};
B* g_B;
class C;
C::Func()
{
A* pa = g_B->GetA();
if( pa ) dosth(); // 这里做了防御性检测
else LOG();
}
因为class B中的指针 pA 被创建的时候可以保证是有效的,那么在class C中使用是不是可以省略 if(pa)这个防御性检测,当然如果只是这一个地方使用到,加上防御性检测当然是最好,但是如果很多很多个地方都需要 A* pa = g_B->GetA(); 这样的操作,每一处都加上防御性判断是不是有必要呢?

