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


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

    说实在的,我对这个原则体会不是很深,平时在使用对象前,检查是否为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;
    }
     
    考,这也够麻烦的啊!不过麻烦我一个,方便千万人。雷锋精神永垂不朽!
    是这样吗?没有把握。
  • 相关阅读:
    Python学习 day01打卡
    Python变量常量及注释
    Python基础简介
    「ubuntu」sudo命令卡住
    「ubuntu」sudo无密码
    「ubuntu」Ubuntu Recovery模式下只读问题
    「ubuntu」在Ubuntu Server 16.04 LTS下安装VMware Tools(转)
    「mysql」设置utf8编码
    「hive」hive2.3.0配置derby
    「hadoop」log4j参考
  • 原文地址:https://www.cnblogs.com/senline/p/4461464.html
Copyright © 2020-2023  润新知