码迷,mamicode.com
首页 > 其他好文 > 详细

敏捷软件开发 – NULL OBJECT模式

时间:2016-09-14 18:38:20      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

考虑以下代码

Employee e = Db.GetEmployee("Bob");
if(e != null && e.IsTimeToPay(today))
{
    e.Pay();
}

  大多数人曾经由于忘记对null进行检查而受挫。该管用手法虽然常见,但却是丑陋且易出错的。

  通过让Db.GetEmployee抛出一个异常而不是返回null,可以减少出错的可能性。不过,try/catch块对比null的检查更加丑陋。

  可以使用NULL OBJECT模式来解决这些问题。通常,该模式会消除对null进行检查的需要,并且有助于简化代码。

 技术分享

  Employee变成了一个且有两个实现的接口。EmployeeImplementation是正常的实现。它包含Employee对象被期望拥有的所有方法和变量。当Db.GetEmployee在数据库中找到一个雇员时,就返回一个EmployeeImplementation实例。仅当Db.GetEmployee在数据库中没有找到雇员时才返回NullEmployee的实例。

结论

  那些长期使用基于C语言的人已经习惯与函数对于某种失败返回null或者0。我们认为对这样的函数的返回值是需要测试的。NULL OBJECT模式改变了这一点。使用该模式,我们可以确保函数总是返回有效的对象,及时在它们失败时也是如此。这些代表失败的对象“什么也不做”。

 

 

摘录自:[美]RobertC.Martin、MicahMartin著,邓辉、孙鸣译 敏捷软件开发原则、模式与实践(C#版修订版) [M]、人民邮电出版社,2013、254-256、

 

敏捷软件开发 – NULL OBJECT模式

标签:

原文地址:http://www.cnblogs.com/guqiangjs/p/5872803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!