web-dev-qa-db-ja.com

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

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

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

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

ORMを使用することで最もメリットがあるのは、どのようなWeb開発プロジェクトですか?

10
Fred Wilson

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

最初に、ORMにリストした利点に同意しません

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

代わりに、ORMの実際のメリットは次のとおりです。

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

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

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

ORMは、かなり単純なCRUDデータベースロジックが多数含まれるアプリケーションに最適です。 ORMはそれほど効果的ではありません

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

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

5
Kramii

SQLも快適に作成できます。また、データベースへの接続、切断、プーリングなどについて心配する必要がないだけでなく、SQLをまったく記述しなくても済むようになりました。

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

4
Otávio Décio

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

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

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

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

2
user8685

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

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

2
Paul Sanwald

私は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を使用すると、データをフラットデータベースからインフレートされたオブジェクト表現に変換できます。

1
Craige

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

  • オブジェクト指向ではないもの。
  • データを永続化する必要がないもの。
  • オブジェクト指向のDBを使用するため、追加のマッピングレイヤーは必要ありません。
  • 非リレーショナルNoSQLソリューションを使用するもの。
1
vartec