問題提起シリーズ?なのかな。
なぜわからないのかがわかった。。。かな?
捨てられない戻り値
さてサンプルで説明する際などに戻り値は不適切な場合が多いっていうのを書きました。
すこし具体的にコンテキストについて考えてみましょう。
int 登録処理(int 得意先ID, string "伝票名称")
この戻り値は登録した結果のたとえば伝票IDがIDENTITY値として戻ってくるとしましょう。
利用する側はこんな感じになるでしょうか。
int 伝票ID = 登録処理( 100, "新発売のWindows Vistaについて" );
DataRow dr = 取得処理(伝票id);
特に問題があるとは思えませんよね?
伝票IDがこのタイミングで不要な場合には読まずに捨てればいいのです。その場合のサンプルがこちら
登録処理( 100, "新発売のWindows Vistaについて" );
ただ登録処理の伝票名称の重複は不可となっている場合にはどうしましょう。
この重複不可エラーはもちろん業務的なエラーですから、アプリケーションを落としてはいけません。
方法としては、例外、クラス化などがあるでしょう。
int 登録処理(int 得意先ID, string "伝票名称") {
try {
return (int)com.execute();
} catch (SQLException ex){
if ( ex.Number = 2726 ) {
throw new KeyDuplicationException();
} else {
throw ex;
}
}
}
int 登録伝票ID;
エラーコード _error;
bool 登録処理(int 得意先ID, string "伝票名称") {
try {
登録伝票ID = com.execute();
return true;
} catch (SQLException ex){
if ( ex.Number = 2726 ) {
this._error = エラーコード.KeyDuplicate;
return false;
} else {
throw ex;
}
}
}
#あくまでイメージなので、微細なところに突っ込むのはなしで。
さて、上の案と、下の案どっちがより優れているでしょうか。
上の案は現状の流行であるコンテキストを重視したタイプ。
下の案は一昔前の成功失敗を確実に追い求めるタイプ。
利用する側のコードも一緒に考えてみてください。記述するサンプルも一緒に考えてみてください。コーディング量も考えてみてください。
#それだけで飯を食っているわけではないけど、ライターな自分への自戒なども込めて。