なぜかAmazonに新品が売ってなかったので、紀伊国屋Webで注文していた本が届きました。
.NETのクラスライブラリ設計 (Microsoft.net Development Series)
- 作者: Krzysztof Cwalina,Bard Abrams,藤原雄介
- 出版社/メーカー: 日経BP社
- 発売日: 2009/12/23
- メディア: 単行本
- 購入: 10人 クリック: 603回
- この商品を含むブログ (34件) を見る
システム開発って開発言語の文法だけ覚えていたら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();
このコードはフィクションです・・・と言ってみたい。