A-Listers

140字に収まらない海外テックネタヘッドライン

ORMがアンチパターンである11の理由

with 4 comments

サンフランシスコのプログラマLaurie Voss氏が書いた見逃せない記事が賑わっています。近年のフレームワークやライブラリの定番中の定番ORマッパーが既にアンチパターンなのではというのが彼の主張です。この記事を書くきっかけになったのはこのツイートだそうです。

ORM が危険なアンチパターンだっていうのはどれだけ言っても言い過ぎることはない

このツイートに対して各方面(ActiveRecord, Doctrine, Hibernate)から多くの(激しい)返信が寄せられて書かれたのが問題のエントリです。まずはアンチパターンとは何かの定義として下記の2つを挙げています。

  • 当初は有益だが、長期的にみると良い結果以上の悪い結果を招く。
  • 確証があり繰り返されている別の解決方法がある。

当初は良さそうに見えたORMがいざ使ってみると問題が明らかになり、しかもその時には切り替えるわけにもいかなくなるというのが彼の主張です。彼による皮肉がたっぷりの論説の最後に付いていたまとめリストは下記のとおり。

  • ORMはSQLベースのモデルよりも最初のうちはシンプルで理解しやすく、手早く書く事ができる。
  • 効率はどんなプロジェクトでも最初の頃は十分。
  • 不幸にもそれらのアドバンテージはプロジェクトが大きく複雑になると消失し、抽象化は破綻し、開発者はSQLを使わなければならなくなる。
  • ORMの抽象化はほぼ100%のプロジェクトで破綻する。
  • オブジェクトはリレーショナルなクエリの結果を表現するのには不適切。
  • 不適切にクエリをオブジェクトにマッピングすることによって、ORMを廃止しない限り簡単には修正できない非効率性がアプリケーションのあちこちにばらまかれる
  • リレーションを保存する代わりにORMを全てに適用する場合、設計をよく考える必要がある。
  • データが元々オブジェクトならば、NoSQLにオブジェクトを記録する方がリレーショナルデータベースよりも早い。
  • データが元々リレーショナルならリレーショナルデータベースに対するオーバーヘッドになるだけ。
  • リレーショナルなクエリはモデルレイヤーに隠蔽する。ただしAPIの設計は汎用化の誘惑に打ち勝ってアプリケーションに必要なデータを返すようにする。
  • オブジェクト指向設計はリレーショナルなデータを効率的に表現できない。これはORMが解決できないオブジェクト指向デザインの根本的な制限だ。

ORMを使った事がある人にとっては心当たりがありまくりな主張ではないでしょうか。意外と長文なんですが原文を読んでもらう方がORMが良さそうにみえて問題が起こり、そしてその解決方法などのより正確な主張がわかります。また元の記事には現時点で47のコメントが付いており盛り上がっています。
さて、みなさんはORMを次のプロジェクトでも使いますか?

via:http://seldo.com/weblog/2011/06/15/orm_is_an_antipattern

関連:
データベースの間違った使い方10項目 « A-Listers
いきあたりばったりのアーキテクチャと教訓 - Publickey

Written by yandod

2011/06/16 @ 19:00

コメント / トラックバック4件

Subscribe to comments with RSS.

  1. […] « A-Listers http://bit.ly/jO9r5Q 2011/06/16 22:33 via bitlyReplyRetweetFavorite Follow @ryushi@ryushi佐藤太一(taichi) […]

  2. そもそもリレーショナルデータベースが
    アンチパターンなのだ

    test

    2011/06/25 at 02:53

  3. […] ORMがアンチパターンである11の理由 […]

  4. 長所を併存させる新しいもの作らなきゃね。偏るからよくねぇんだ。

    Kirara Takahashi

    2013/04/04 at 01:57


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。