BP Study 第15回:ORマッパー対決〜2008

株式会社ビープラウド

Enterprise Architeture PatternとORマッパー

データベースプログラミングにおける問題

  • SQLの散在
  • 決まりきったコードを何度も書く
    • バグの混入
    • 生産性の低下

パターン化されたものを共通化・汎用化
→ORマッパー
エンタープライズアプリケーションのパターン化
PofEEA

パターンを理解すればフレームワークの選択も適切にできる

例えば多対多を扱う場合
マスタ-関連テーブル-マスタ
という風にする。
アクティブレコードの場合はそれぞれに対応するクラスを作る。
データマッパーの場合は普通にクラス同士が多対多の関係になるし、
更新する場合、表に出てこない関連テーブルも更新する。

Hibernate

作者…Gavin King

特徴

  • POJOを永続化できる
  • HQL
    • SQLの方言に依存しない
  • セッションという概念を理解しないと正しく使えない
  • パフォーマンス工場テクニックを簡単に利用出来る
  • JPA互換

セッションとは

  • 永続化操作を行う為の短期的なセッション(≠トランザクション)
  • 主な用途はオブジェクトのキャッシュ
  • セッションクローズ時にSQLに変換されてバッチ実行される。
    • 「あるオブジェクトを突っ込む→それを削除する」これをcommitする→DBに対しては何もしない

EJB2ではオブジェクトのロールバックもあったが、HibernateにはないしEJB3にはなくなった。

S2JDBC

1.4以前は窓から投げ捨てろということか

  • エンティティ
  • 挿入更新削除
    • jdbcManagerの各メソッドにエンティティを渡してexecute

Hibernateとの違いはHQL vs メソッドチェーン?
HibernateにはCriteriaQueryがあるよ。
どう違うの?
セッション絡みの面倒がない。

LINQ

様々な外部データソース

インピーダンスマッチング

  • 形式の相互変換
  • 型付けされている/型がない/型はあるがduck typing
  • セマンティクスを考慮
    • バリデーション
    • コンバータ

外部データの操作

  • 外部データの型システムを忠実に再現するオブジェクトモデルを構築する
    • DOM
    • SQL datatypes
  • 必要な型変換を行い、オブジェクトモデルを実行環境上に再構築して操作を行う。
    • ORマッパーとか

LINQ及び周辺技術のモチベーション

  • 外部データを操作する方法はいくつもある
  • やりたい事はいつも一緒
  • 操作の例

着眼点

  • CollectionsAPI及びジェネリクス等によって、任意のオブジェクトの集合を抽象化する枠組みは既に整っている。
  • あとはデータのフィルタリングと加工の仕組みを整えるだけ

パイプラインパターン

  • GoFで言う所のデコレーターパターン
  • イテレータを連結して、データの加工及び抽出を行う

ActiveRecord

特徴

rakeはかなり高機能
Railsにはirbの拡張でModelクラスを対話的に操作出来るconsole環境が用意されている。