minimize

Javaは静的型付け言語です。
つまり、変数は宣言したときに型が決定されますし
呼び出すメソッドは予め定義されていなければいけません。

リフレクション

これをある程度解決するために用意されているのがリフレクション(Reflection)です。
Reflectionを使うことによって、使用するクラスやメソッドを動的に決定することが出来るようになります。
しかし、これは非常にリスクのある方法だということを良く知っておく必要があります。

Reflectionのメリットは以下の一点に尽きるでしょう。

しかし、数々のデメリットがあります。

使う場面は最小限に

これを見れば、メリットよりもデメリットの方が多いという事に気付くはずです。
しかし、それでもどうしてもReflectionを使わなければならない場面というのはあります。
よく検討して、他に方法が見当たらない場合のみReflectionを使うようにしましょう。

よく言われる事として、Reflectionは処理速度が遅いという点が指摘されます。
しかし、僕はこれをデメリットだとは思っていません。
なぜなら、Reflectionはそれほど頻繁に呼び出される処理ではないからです。
1回の処理で1000回以上もReflectionを使うような事が無い限り、
Reflectionによる速度低下はほぼ無視していい程小さいというのが事実です。
もちろん、気になる人は実際にプロファイリングしてその結果を確かめましょう。

マッピング

Reflectionと同様にある種の柔軟性を与えてくれるものに、マッピングがあります。
以下に挙げる2つのコードを比較してみて下さい。

Pattern 1

bean.setName("jon");
bean.setAge(25);

Pattern 2

bean.put("name", "jon");
bean.put("age", Integer.valueOf(25));

前者は一般的なJava Beanを使ったもの、後者はマッピングを使ったものです。
パラメータやDO(Database Object)を扱うのに、マッピングが使われることがあります。
今度はこれによるメリット・デメリットを考えてみましょう。

メリット

デメリット

こちらも Reflection と同じように、デメリットの方が圧倒的に多いです。
というわけで、マッピングの使用も必要最小限に抑えましょう。

解決法

これらを解決するために、非常に有効な手段があります。
それはずばり、コードの自動生成 です。
特に、マッピングを使う必要性(メリット)はこれによってほぼ無くなります。

Javaのような静的言語の弱点を補うために、やれる手段はいくらでもあるのです。

どうしても使うときは

さて、以上のことを踏まえてもリフレクションやマッピングを使わざるを得ない場面もあります。
こんなとき、それによるバグの発生を最小限に抑えるために
是非やってほしいことがあります。

それは、テストの自動化です。
例えばマッピングではフィールド名が(tel_no→tel_numberのように)変更されても
そのロジックが実行されるまで不具合に気付くことができません。
どんなに優秀なIDEを使っていても、です。
テストを自動化していれば、この不具合を瞬時に見抜くことが出来ます。

テスト自動化のメリットは、こんなところにもあるのです。
自動化テストのメリット でも書いたように、自動化されたテストは
バグを未然に防ぐという目に見えない(しかしとても大きな)効能があるのです。

[コメント(0)]