最近、Null Object デザイン パターンに出会いました。同僚は、コード全体で発生する null ポインター チェックをなくすために使用できると言っています。
たとえば、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 チェックは、値オブジェクトの複雑さに基づいてコード全体に急速に広がる可能性があります。
null チェックには 2 つの問題があります。コードが醜く読みにくくなる傾向があります。経験の浅い開発者は、実際には例外をスローするはずなのに、不必要な null チェックを行います。たとえば、上記のコードでは、getCustomer() 自体から例外をスローする方が適切です。これは、指定された CustID の顧客情報が見つからない場合、CustID が無効であることを示しているためです。
さて、null オブジェクト パターンに戻りますが、「null」CustomerVO オブジェクトを使用して null チェックを非表示にすることはできますか?
CustomerVO {
String firstName = "";
String emailID = "";
}
それは理にかなっていますか?どう思いますか?
また、アプリでの null チェックを最小限に抑えるために従うことは何ですか。