SQLAlchemy

TurboGearsのDBアクセス層はSQLObjectが使えていたのだが、0.9a5よりSQLAlchemyも使えるようになった。
さて何が違うかというとSQLObjectはアクティブレコードであり、クラス:テーブル、インスタンス:行という関係がベースになっている。
それらのクラスに対して振る舞いを付け加えるというわけだ。
これは直感的な反面それ以上のこと(結合結果をオブジェクトにしたり、集約結果をオブジェクトにしたり)をするのには向いていない。
今回新たに使用できるようになったSQLAlchemyはORマッパーである。
任意のクエリ結果をオブジェクトとして扱える。
まあ、ただで扱えるわけではなく、それ相応の準備(マッピング定義やテーブルメタ定義)が必要だし、Python言語を使ってクエリを組み立てるなど、大掛かりな仕掛けが存在する。
どちらがよいかではなく、要所要所で選択できることが重要だと思うし、また選択できる能力を身につけたい。

# でもSQLAlchemyのIdentityは0.9a5の段階ではまともに動きません。orz

追記
他のエントリで見たが、アクティブレコードはドメインオブジェクトであるうえで、データベースに依存してしまう。この場合はSQLObjectを継承しているため、ユニットテストでもデータベースを使わないといけなくなってしまうということ。ORマッパーの場合は、ドメインオブジェクトに値を設定してくれるので、データベースに依存しないという違いがある。

エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented SELECTION)

エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented SELECTION)