give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

技術書追加その2

なぜかAmazonに新品が売ってなかったので、紀伊国屋Webで注文していた本が届きました。


.NETのクラスライブラリ設計 (Microsoft.net Development Series)

.NETのクラスライブラリ設計 (Microsoft.net Development Series)


システム開発って開発言語の文法だけ覚えていたらOK、というわけじゃなく「良い設計」や「良いイディオム」に関する知識も非常に重要です。
たとえばtry〜catch構文を知っているからといって、次のようなコードを絶対書いてはいけません。

try {
  DataTable dataTable = new DataTable();
  //データベースにアクセスするコード
  return dataTable;
}
catch (Exception e) {
  //Wow! 例外の握りつぶし!!
  return null;
}


この本はC#に関するそういうベストプラクティスやアンチパターンがしっかり載っていて勉強になりそうです。
ただし、Amazonのレビューでもあったように直訳気味の日本語訳はちょっと「がんばりましょう」レベルなのが残念です(^ ^;


P.S.
上のサンプルコードをもっとリアルにするとこんな感じ・・・

int get_data_table(string id) //メソッド名にアンダーバー(_) 戻り値はDataTableじゃなくint
{
  try {
    DataTable data_table = new DataTable(); //変数名にもアンダーバー
    //データベースにアクセスするコード
    this.table = data_table; //処理結果は戻り値じゃなくてインスタンス変数に格納!?
    return 1; //C言語ですか!?
  }
  catch (Exception e) {
    this.err_msg = e.Message; //うんそうそう、例外の情報を保存して・・・ん?待て待て!!
    return 0; //やっぱりC言語なんですね (T T)
  }
}

//そして呼び出し側のコードはこうなる
int val = some_obj.get_data_table(id);

//ほらやっぱり戻り値は無視だ! tableはpublic変数か・・・
DataTable table = some_obj.table; 

//tableがnullなので例外発生!しかし、元の例外の原因はデバッグ実行しない限りわからない・・・
string name = table.Rows[0][0].ToString(); 


このコードはフィクションです・・・と言ってみたい。