|
||||||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||||||
| Hibernateのマッピング記述 | ||||||||||||||||
|
HibernateではXMLにオブジェクトとテーブルの紐付けに関する情報を記述します。 HibernateはRails登場以前から普及しているため、CoC的な考えがあまりありません。カラム名とプロパティ名を同一にすると、XML記述の一部を削減することができますが、全体からすると微々たるものです。 以下にHibernateを用いた場合のソースコードを示します。Zooクラス自体はきれいにPOJO(Plain Old Java Object)にまとまっているのですが、アクセッサ(getXXX/setXXX)の記述が冗長です。また、どうしても定義ファイルの記述量が膨らんでしまっています。 クラスファイル
マッピングファイル
|
||||||||||||||||
| JPAのマッピング記述 | ||||||||||||||||
|
JPAは最近策定された仕様ということもあり、Hibernateに比べCoCに対応しています。JPAではJava SE 5.0から導入された「アノテーション(@XXXの部分)」を用いてマッピング情報を記述します。そして定められた規約にのっとっていれば、ほとんどのアノテーションを省略することができるのです。 アノテーション記述を省略するための規約(一部)を下記に示します。
表3:アノテーション記述を省略するための規約(一部) JPAを用いた場合のソースコードは以下のようになります。
表3の規約にのっとっているので、アノテーションをほとんど記述することなく、Zooクラスとテーブルが紐付いています。ただし、やはりアクセッサの記述は必要です。また、@OneToManyアノテーションによって、Animalオブジェクトのコレクションを取得できるようになっています。 |
||||||||||||||||
| マッピング記述の比較結果 | ||||||||||||||||
|
ここまで各製品のマッピング記述を見てきました。コード量を見るとActiveRecordが群を抜いて少ないことがわかります。また多量の定義ファイルが必要なHibernateに比べれば、JPAもかなり奮闘しているのではないでしょうか。 一方、ActiveRecordとJPAを比べると、アクセッサの動的生成部分で差がついているのがわかります。 元々Javaは静的型付言語ですので、実行時にメソッドを追加することができません。つまり少なくとも現行の言語仕様では、アクセッサ記述部分の差を埋めることは不可能です。 CoCの優劣を決める大きな尺度の一つは「規約からどこまで実装削減を展開できるか」であると考えます。ActiveRecordは動的言語であるRubyが持つ強力なリフレクション機能のおかげで、CoCの効果を最大限まで活かしているといえるでしょう。
※注3:
HibernateではHibernate ToolsやMiddleGenといったオープンソースのツールを用いることでマッピングファイルを自動生成できるため、記述の労力は軽減可能です。
|
||||||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||||||
|
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||
|
|
||||||||||||||||
|
||||||||||||||||

