Skip to content

Instantly share code, notes, and snippets.

@asufana
Last active December 14, 2015 03:03
Show Gist options
  • Save asufana/16227e44e55bf41ab6d4 to your computer and use it in GitHub Desktop.
Save asufana/16227e44e55bf41ab6d4 to your computer and use it in GitHub Desktop.
ORMに求めること

ORMに求めること

AndroidのORMにもとめること、あるいはOrmaを開発した話 に触発されて、自分がORMに求めることをまとめてみた。

ORM要件

  1. 速度
  • 社内システムでの利用を想定しているので速度要件は特にない
  • それよりも開発効率を高める機能性を重視する
  1. テーブルスキーマ管理
  • 別ファイル(XML,YAML)管理はNO
  • POJOにアノテーションという形で指示したい
  • POJO指示なので、テーブルとオブジェクトは1対1の対応で良い
  1. スキーマ適用
  • POJOのスキーマ指示が、実テーブルに自動反映されて欲しい
  • 本番用として自動反映されないようにモードが指示できること
  • 同様に本番用としてスキーマDDLが出力できること
  • スキーマDDLからも反映できること
  1. DBハンドル
  • REPOを必ず作成するという開発ルールとするならば、ハンドルはオブジェクトとして提供される形でも良い
  • staticは便利だが(Model.find(query)など)、実装にはバイトコード操作と独自クラスローダを用意しないといけないため面倒
  • オブジェクトにすることでmock差し込みなども容易にできる
  • ただし削除や更新などはインスタンスにDB操作メソッドを持たせたい(instance.delete()など)
  1. テーブル関連
  • OneToMany, ManyToOne として関連定義、および取得する機能が必須
  1. 型安全クエリ
  • ネイティブSQLもサポートする
  • が、基本はほとんど利用しなくてよい様に型安全クエリが欲しい
  • select時のカラム指定など dbhandle.user().name().find("hoge") とかしたい
  • カラムのメソッド化などはAPTで出来るが、複数カラムの指定やignoreCase指示など、DSL定義が難しそう。。
  1. 更新処理はJPAぽく
  • 更新処理時にSQL文を書きたくない
  • モデルにsetterで更新を行った後に、instance.update()としたい

まとめてみたものの Play + JPA ほぼそのままだね。 自分で実装する際の仕様ということで。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment