BP Study 第15回:ORマッパー対決〜2008
Enterprise Architeture PatternとORマッパー
データベースプログラミングにおける問題
- SQLの散在
- 決まりきったコードを何度も書く
- バグの混入
- 生産性の低下
パターン化されたものを共通化・汎用化
→ORマッパー
エンタープライズアプリケーションのパターン化
PofEEA
- テーブルデータゲートウェイ
- テーブル1つに対応
- 行データゲートウェイ
- 1行に対応
- アクティブレコード
- 1行に対応
- ドメインロジックを実装している
- 最近はDBよりの所にドメインロジックを書くのは廃れている
- RailsのActiveRecord、S2JDBCとか
- データマッパー
パターンを理解すればフレームワークの選択も適切にできる
例えば多対多を扱う場合
マスタ-関連テーブル-マスタ
という風にする。
アクティブレコードの場合はそれぞれに対応するクラスを作る。
データマッパーの場合は普通にクラス同士が多対多の関係になるし、
更新する場合、表に出てこない関連テーブルも更新する。
Hibernate
作者…Gavin King
特徴
セッションとは
S2JDBC
1.4以前は窓から投げ捨てろということか
Hibernateとの違いはHQL vs メソッドチェーン?
HibernateにはCriteriaQueryがあるよ。
どう違うの?
セッション絡みの面倒がない。
LINQ
様々な外部データソース
インピーダンスマッチング
- 形式の相互変換
- 型付けされている/型がない/型はあるがduck typing
- セマンティクスを考慮
- バリデーション
- コンバータ
外部データの操作
- 外部データの型システムを忠実に再現するオブジェクトモデルを構築する
- DOM
- SQL datatypes
- 必要な型変換を行い、オブジェクトモデルを実行環境上に再構築して操作を行う。
- ORマッパーとか
LINQ及び周辺技術のモチベーション
着眼点
- CollectionsAPI及びジェネリクス等によって、任意のオブジェクトの集合を抽象化する枠組みは既に整っている。
- あとはデータのフィルタリングと加工の仕組みを整えるだけ
パイプラインパターン
ActiveRecord
特徴
- ActiveRecordパターン
- Mappingが簡単
- DDLもRubyで書ける(Migration)
- plugin色々
rakeはかなり高機能
Railsにはirbの拡張でModelクラスを対話的に操作出来るconsole環境が用意されている。