首页 > 代码库 > 敏捷软件开发 – NULL OBJECT模式

敏捷软件开发 – NULL OBJECT模式

考虑以下代码

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模式