Slow Failing(慢失败)与 failing fast(快速失败)相反,上述代码尝试缓慢死亡并杀死其他人 。它向调用者隐藏了失败而不是让其知道出了问题需要马上进行异常处理 。这个结论与上面"特殊错误处理"章节的讨论很接近 。最好让代码尽可能脆弱,必要时让它崩溃 。
要确保你的方法对调用方提供的操作数有着极高的要求,如果调用方提供的数据不够或者根本不符合方法主要的使用场景,抛出异常吧 。或者返回一个 null 对象,该对象暴露一些常见行为,并对所有其他调用抛出异常,参考如下:
文章插图
可变的和不完整的对象一般来说,强烈建议在设计对象时考虑到不变性 。这意味着对象在实例化过程中获得所有必要的内容,并且在整个生命周期中永远不会更改其状态 。null 通常被用在延迟加载中以使对象不完整且可变 。例如:
文章插图
这种技术虽然应用广泛,但在面向对象编程中是一种反设计模式的 。主要是因为它使一个对象负责计算平台的性能问题,而这对 Employee 对象应该是透明的 。
与其管理状态并公开业务相关的行为,不如让对象处理好其自身结果的缓存---这就是延迟加载的目的 。缓存不是 employee 该在办公室里做的事,不是吗?
解决办法是不要像上面的例子那样,以这种原始的方式使用延迟加载 。相反,将这个缓存问题移到应用程序的另一层 。例如在 Java中可以使用面向切面编程技术 。例如,jcabi-aspects 使用 @Cacheable 注解来缓存方法返回的值:
文章插图
希望通过这篇文章的分析,能让你停止在代码中继续使用 null 作为返回值 。
来源:掘金 链接:https://juejin.im/post/5d740e7f5188251325775966
推荐阅读
- 教你在 CentOS 7 下编译安装 Python 3.7 与 Python 2.7.5 共存
- Python3.7编译常见报错之“No module named ‘_ctypes’”
- centos7系统源码编译安装PHP7.3.5版本
- iPhone 拍照声音如何关闭?教你4招防止发出相机「咔嚓」声
- 汽油加油加满真的会伤油箱吗?「老司机」似乎总在胡扯
- 暗黑|1.76复古「暗黑三职业」招双白虎战BOSS,体验打怪爆装的乐趣
- 如何彻底防止反编译,dex加密怎么做
- 常见食物的寒热属性「建议收藏」
- 节气门清洗真的有作用吗?
- 使用Windows 10「任务视图」和「虚拟桌面」提高工作效率