最近我遇到了Null Object設計模式,我的同事們說它可以用來消除在整個代碼中遇到的空指針檢查。空對象模式以避免空檢查?
例如,假設DAO類返回有關Customer的信息(在名爲CustomerVO的值對象中)。我的主要課程應該提取firstName和emailId並將電子郵件發送給客戶。
...
CustomerVO custVO = CustomerDAO.getCustomer(customerID);
if(custVO != null) { // imp, otherwise we may get null ptr exception in next line
sendEmail(custVO.getFirstName(), custVO.getEmailID());
}
...
這是很簡單的例子,但這種null檢查可以基於價值對象的複雜性在你的代碼迅速蔓延。
我有一個空檢查兩個問題, - 他們往往tmake代碼醜陋不堪,閱讀 - 較少經驗的開發人員把不必要的null檢查的時候,其實他們應該拋出異常。例如,在上面的代碼中,最好從getCustomer()本身拋出異常,因爲如果它無法找到給定CustID的客戶信息,則表示CustID無效。
好吧,回到空對象模式,我們可以使用'null'CustomerVO對象來隱藏空檢查嗎?
CustomerVO {
String firstName = "";
String emailID = "";
}
難道這不合理嗎?你怎麼看?
爲了儘量減少應用程序中的空檢查,您遵循的是什麼?
+1,但我不希望我的客戶擁有sendEmail方法。這只是給顧客分類太多的責任。這就像給每個班級一個「打印」方法,現在不得不在每個班級實施打印邏輯,或者讓每個班級依賴某個打印管理器,而它可能僅限於打印管理器和實際啓動打印的表單/類,以便打印管理器要打印的類。在空模式非常好的情況下,在單元測試中,例如提供一個不做任何事情的日誌類,因此您不必修改正在測試的代碼。 – 2010-10-17 07:50:26