「译」为什么 null 不好?( 二 )


Slow Failing(慢失败)与 failing fast(快速失败)相反,上述代码尝试缓慢死亡并杀死其他人 。它向调用者隐藏了失败而不是让其知道出了问题需要马上进行异常处理 。这个结论与上面"特殊错误处理"章节的讨论很接近 。最好让代码尽可能脆弱,必要时让它崩溃 。
要确保你的方法对调用方提供的操作数有着极高的要求,如果调用方提供的数据不够或者根本不符合方法主要的使用场景,抛出异常吧 。或者返回一个 null 对象,该对象暴露一些常见行为,并对所有其他调用抛出异常,参考如下:

「译」为什么 null 不好?

文章插图
 
可变的和不完整的对象一般来说,强烈建议在设计对象时考虑到不变性 。这意味着对象在实例化过程中获得所有必要的内容,并且在整个生命周期中永远不会更改其状态 。null 通常被用在延迟加载中以使对象不完整且可变 。例如:
「译」为什么 null 不好?

文章插图
 
这种技术虽然应用广泛,但在面向对象编程中是一种反设计模式的 。主要是因为它使一个对象负责计算平台的性能问题,而这对 Employee 对象应该是透明的 。
与其管理状态并公开业务相关的行为,不如让对象处理好其自身结果的缓存---这就是延迟加载的目的 。缓存不是 employee 该在办公室里做的事,不是吗?
解决办法是不要像上面的例子那样,以这种原始的方式使用延迟加载 。相反,将这个缓存问题移到应用程序的另一层 。例如在 Java中可以使用面向切面编程技术 。例如,jcabi-aspects 使用 @Cacheable 注解来缓存方法返回的值:
「译」为什么 null 不好?

文章插图
 
希望通过这篇文章的分析,能让你停止在代码中继续使用 null 作为返回值 。
来源:掘金 链接:https://juejin.im/post/5d740e7f5188251325775966




推荐阅读