一个开发原则:永远不要返回NULL

看一篇文章:10个经典的java开发原则,里面一个原则:永远不要返回NULL。java

说实在的,我对这个原则体会不是很深,平时在使用对象前,检查是否为null已经成了习惯,也是我要求开发人员的一个标准动做。可是文中提的也有必定的道理。所以就拿过来讨论了下。
---------------------------------
为何,由于不少代码都是 a.b(......).c(...) 这么连着调用。若是每层调用都要检查是否为空的话,代码就太难看了,也太麻烦了。有没有更好的解决方法呢?
可是不返回null,返回什么呢?显然要反悔一个类的实例,可是怎么保证获得的结果是预期的呢,也就是说,怎么能保证这样虽然不会报“未交对象引用设置到对象的实例”(实际上就是空引用)这个错误,可是能获得“正确”的结果呢。显然,应该是nul可是没有返回null是得不到正确的结果,可是咱们要保证结果是可控的,也就是说,虽然代码顺利执行下来了,可是咱们要知道实际上啥也不该该作。或者,咱们要针对这种状况,返回能够接受的结果。
至于什么事能够接受的结果,这个有么有必定的原则和规律呢,仍是须要具体问题具体分析呢?体育老师教的语文,本身都以为没说明白,绕!
一类里要有个标志,表示出“虽然是个非空的实例,可是它确实表明null”这个意思。问题接着追下去,若是是这个意思的话,那么他的方法应该作什么呢?也就是要解答:若是不存在这个实例,那么这个方法应该是什么业务逻辑。搞清楚了这个,就能够写这样的代码了:
假设那个标志命名为  nullInstance;
if ( nullINstance ) then {
      不存在这个实例的业务逻辑;
}else{
     正常的业务逻辑。
}
 
这么说太抽象了,咱们举个实际的例子吧。
设计以下简单场景:删除员工所属的部门,
(1)员工类:employee,
(2)员工所属部门(咱们用方法来表示吧,不用属性了,为了说明问题):getDepartment()
(3)部门类:department;
(4)部门的删除方法:delete();
那么:
  getDepartment(){
      if( nullINstance  ){ //若是员工类是空的话
       return new Department( nullInstance=true ); //建立一个”空“实例;
     }
      else{
          return new department( thisd.deptID); //返回一个具体的部门类
     }
  }
 
 那么:类department.delete()的实现:
 delete(){
     if( nullINstance  ){ //若是空的话
          return ;
    else 
        执行删除方法:delete from department where deptid = 2222;
}
 
考,这也够麻烦的啊!不过麻烦我一个,方便千万人。雷锋精神永垂不朽!
是这样吗?没有把握。
相关文章
相关标签/搜索