まず、SQLを使用してデータベース作業の95%を実行したと言います。最近、NHibernateやDoctrineなど、さまざまなORMの調査を行いました。
SQLや、ORMが提供するデータベースの移植性をよく理解する必要がないことの利点がわかります。しかし、SQLを理解することでORMとの連携がより効果的になることもわかります。私のキャリアの中で、アプリケーションの最大の変更はデータベースベンダーになるとしか思えません。
私はSQLの作成に非常に慣れており、ORMを使用することでよく教えられる利点を実現していないようなので、ORMのヘビーユーザーへの私の質問は次のとおりです。
ORMを使用することで最もメリットがあるのは、どのようなWeb開発プロジェクトですか?
(ほぼ)すべてアプリケーションはORMの恩恵を受けます。
最初に、ORMにリストした利点に同意しません。
代わりに、ORMの実際のメリットは次のとおりです。
あなたがコメントするように、ORMの欠点の1つはパフォーマンスの低下です。ただし、これは通常、より多くのハードウェアを使用することで相殺できます。
通常、プログラマーの時間はハードウェアよりもコストがかかるため、ORMは、SQLを手動でコーディングする代わりに、一般に優れたオプションです。
ORMは、かなり単純なCRUDデータベースロジックが多数含まれるアプリケーションに最適です。 ORMはそれほど効果的ではありません:
私の経験では、これらの状況はまれです。したがって、私の答え。
SQLも快適に作成できます。また、データベースへの接続、切断、プーリングなどについて心配する必要がないだけでなく、SQLをまったく記述しなくても済むようになりました。
だから、私はあなたの質問の否定に答えます。 ORMの恩恵を受けない唯一のWeb開発プロジェクトは、データベースとまったく通信しないプロジェクトです。少数派(もしあれば)だと思います。
ASP.NET Webフォームでの私の経験に基づいて、私はstateful Webフレームワークを使用するWebプロジェクトがORMを使用することから最も恩恵を受けることを提案します。
ステートフルフレームワークでは、アクティブなサーバーコントロールの階層に基づいて、マークアップがバックグラウンドで自動的に生成されます。これらのコントロールを自動的にロードしてデータベースに永続化させるのは魅力的です。これはORMが役立つ場所です。
パイプラインの終わり(HTML出力)を抽象化して、最初(データソース)を同じ方法で処理すると、アプリケーションコードのビジネスロジック内にとどまるようになります。
これが物事を行うための良い方法であると言っているわけではありません。 ORMが自然に適合する場所です。
大規模で非常に接続されたオブジェクトモデルがあるアプリケーションでは、ORMを使用すると、同じ結合を何度も何度も作成する必要がなくなります。
もう1つの利点は、遅延読み込みです。APIがオブジェクトグラフを返し、APIのクライアントがそのグラフのサブセットのみを使用するようにします。
私は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の恩恵を受けないプロジェクトは次のとおりです。