ORMを使用するとどのような種類のWeb開発プロジェクトにメリットがありますか?


10

最初に、SQLを使用してデータベース作業の95%を完了したと言います。最近、NHibernateやDoctrineなどのさまざまなORMの調査を行いました。

多くのSQLと、ORMが提供するデータベースの移植性を知る必要がないことの利点がわかります。しかし、SQLを理解することでORMとの連携がより効果的になることもわかります。私のキャリアの中で、アプリケーションの最大の変更はデータベースベンダーになるとしか思えません。

私はSQLの作成に非常に慣れており、ORMを使用することでよく教えられる利点を実現していないようなので、ORMのヘビーユーザーへの私の質問は次のとおりです。

どのようなWeb開発プロジェクトがORMの使用から最も恩恵を受けますか?


3
答えは「すべて」です。しかし、それはおそらくあなたが知りたいことではありません。質問を絞り込んで、より具体的な情報を尋ねることもできます。
S.Lott、2011

1
私にとって、SQLは現在作成するのがより簡単ですが、それは私の慣れ(または無知)のためだけです。ORMは通常のSQLよりも遅いため、常に最適な選択肢とは限りません。ただし、多くの開発者は、これは通常は重要ではないと述べています。私はORMに最も適したプロジェクトに興味があります。ほとんどの回答はおそらく「すべて」であることがわかります。それも問題ありません。特定の答えを探しているのではありません。:)
フレッドウィルソン

詳細を尋ねなければ、多くを学ぶことはできません。
S.Lott、2011

回答:


5

(ほぼ)すべてのアプリケーションがORMの恩恵を受けます。

まず、あなたがORMに挙げている利点に同意しません

  • ORMを使用しても、必ずしもSQLを知る必要がないわけではありません。SQLの知識は、ORMツールが実際に何をしているかを理解するのに役立ちます。これは、デバッグ中に特に役立ちます。さらに、SQLは実際には、選択したORMの機能を超える複雑なクエリを開発するために必要になる場合があります。
  • そして、あなたが言うように、移植性は実際の生活ではめったに心配されません。

代わりに、ORM の真の利点は次のとおりです。

  • ORMは、SQLでの大量のCRUDロジックの書き込みを節約するため、プログラマーの時間を節約します
  • 多くのORMには、書き込みやデバッグが難しい複雑なキャッシュロジックなどが含まれています。時間を節約するだけでなく、これによりアプリケーションの信頼性と保守性向上します(または、少なくとも同じ結果を得るのにかかる時間を節約できます)。
  • 最高のORMには、製品を積極的に開発、保守、サポートするユーザーのコミュニティがあります。カスタムSQLを取り巻くコミュニティは、せいぜい、私たちが解決する必要のある問題にあまり焦点を当てていません。

あなたがコメントするように、ORMの1つの欠点はパフォーマンスの低下です。ただし、これは通常、ハードウェアを増やすことで相殺できます。

通常、プログラマーの時間はハードウェアよりもコストがかかるため、ORMは、SQLを手動でコーディングする代わりに、一般に優れたオプションです。

ORMは、かなり単純なCRUDデータベースロジックが多数あるアプリケーションに最適です。ORMは次の場合には効果が低くなります。

  • データベースへのアクセスをほとんど/まったく必要としないアプリケーション。
  • 複雑なクエリに大きく依存し、単純なCRUDロジックがほとんどないアプリケーション
  • パフォーマンスが重要であるが、より高速なハードウェアを展開する可能性がない状況

私の経験では、これらの状況はまれです。したがって、私の答え。


「ORMを使用しても、必ずしもSQLを知る必要がないわけではありません。」- 仰るとおり。チーム環境で私が目にする利点の1つは、SQLスキルセットを集中できるため、ビジネスレイヤーで作業するすべての開発者が専門家である必要がないということです。
Fred Wilson

1
複雑なクエリの場合は、いつでもSQLに戻ってSQLクエリを作成できます。
harsimranb 2015年

4

私もSQLを書くのが快適です。また、SQLをまったく記述しなくてもよく、データベースへの接続、切断、プールなどについて心配する必要もありません。

だから、私はあなたの質問の否定に答えます。ORMの恩恵を受けない唯一のWeb開発プロジェクトは、データベースとまったく通信しないプロジェクトです。少数派(もしあれば)と私は信じています。


+1:私は自分自身もSQLに非常に精通していると思いますが、それでもOR / Mを好みます。実際、私はOR / Mを有効に活用するためにsqlを確実に処理する必要があると言っています。そうしないと、抽象化がリークしても問題は見つかりません。「多くのSQLを知る必要がない」は機能ではありません。私にとってそれはすべて生産性の向上とコンパイラーがランタイムではなく問題を見つけるようにすること、そしてOR / Mの問題です(特に新しいジェネリック/ linqベースのものが優れています)。
ブルック

@ブルック-私は心から同意します。OR / Mの使用は、SQLの知識がオプションであることを意味するものではありません。
のOtavioDécio

2

ASP.NET WebFormsでの私の経験に基づいて、ステートフルな Webフレームワークを使用するWebプロジェクトはORMを使用することから最も恩恵を受けることを提案します。

ステートフルフレームワークでは、アクティブなサーバーコントロールの階層に基づいて、マークアップがバックグラウンドで自動的に生成されます。これらのコントロールをロードして、その状態をデータベースに自動的に永続化するのは魅力的です。これはORMが役立つところです。

パイプラインの終わり(HTML出力)を抽象化して、最初(データソース)を同じ方法で処理すると、アプリケーションコードのビジネスロジック内にとどまるようになります。

これが物事を行うための良い方法だと言っているわけではありません。ORMが自然に適合する場所です。


2

大規模で非常に接続されたオブジェクトモデルがあるアプリケーションでは、ORMを使用すると、同じ結合を何度も何度も作成する必要がなくなります。

別の利点は、遅延読み込みです。APIがオブジェクトグラフを返し、APIのクライアントがそのグラフのサブセットのみを使用するようにします。


1

ORMとDBALを混同している思います

あなたが言及している概念は、基礎となるデータベースシステムに依存しない移植可能な「sql」を書くことを可能にするデータベース抽象化層(DBAL)です。

一方、ORM(これは(ほとんど?)は常にDBALの上に構築されます):

Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. (ウィキペディア)

簡単に言うと、ORMを使用すると、データをフラットデータベースからインフレートされたオブジェクト表現に変換できます。


説明していただきありがとうございます。私がORMに移行する主な理由は、OOPにさらに焦点を絞り、一部のプロジェクトで意味のあるSQLの記述から離れることです。
Fred Wilson

1

ORMの恩恵を受けないプロジェクトは次のとおりです。

  • オブジェクト指向ではないもの。
  • データを永続化する必要がないもの。
  • オブジェクト指向DBを使用するため、追加のマッピングレイヤーは必要ありません。
  • 非リレーショナルNoSQLソリューションを使用するもの。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.