次のような関数があるとしましょう。
public void saveBooking(/* some inputs */) {
//save into database
}
データベースに保存する前に、さまざまな検証を行う必要があります。メインプログラムでできることは次のとおりです。
//do all the validations and do any necessary handling. Then...
saveBooking(/*inputs*/);
これにより、データベースに保存する前に、すべてのデータが必要なすべての検証に合格する必要があると確信しています。ただし、これは、関数saveBooking()
が検証方法に密接に依存していることを意味します。電話をかけるたびにsaveBooking()
、検証を呼び出すことを忘れないようにする必要があります。
または、すべての検証を関数自体の中に入れて、メソッドを呼び出すだけですべてが処理されるようにすることもできます。ただし、すべてのエラーを個別に処理するには、関数に例外をスローさせ、メインプログラムでキャッチする必要があります。次のようになります。
public void saveBooking(/* some inputs */) /* throws various exceptions */ {
//various validations
//save into database
}
//...and in the main program...
try{
saveBooking(/*inputs*/);
}
catch(MyException1 e1){
//do something
}
catch(MyException2 e2){
//do something
}
これは、自分で複数の例外を作成する必要があることも意味します。良いことは、事前にどのような検証を行う必要があるかを心配する必要がないことです。
これらを使用すると、どれが最適なコード設計であるかわかりません。私は個人的には読みやすい最初の方法を好みますが、それはお互いに依存しすぎて、多くの場所でそれを使用する必要があるときに悪化します。ご意見をお聞かせください!