これらのソフトウェア アーキテクチャのそれぞれが、どの分野で優れているか、または失敗するか?
どちらかを選択するよう促す重要な要件はどれですか?
優れたオブジェクト指向コードと優れたデータベース開発を行える開発者がいると仮定してください。
また、聖戦は避けてください :) 3 つのテクノロジにはすべて長所と短所があります。
これらのソフトウェア アーキテクチャのそれぞれが、どの分野で優れているか、または失敗するか?
どちらかを選択するよう促す重要な要件はどれですか?
優れたオブジェクト指向コードと優れたデータベース開発を行える開発者がいると仮定してください。
また、聖戦は避けてください :) 3 つのテクノロジにはすべて長所と短所があります。
これらのツールはそれぞれ、動作をオーバーライドするためのさまざまなポイントとともに、さまざまな抽象化レイヤーを提供します。これらはアーキテクチャの選択であり、すべてのアーキテクチャの選択は、テクノロジー、コントロール、および組織の間のトレードオフ、アプリケーション自体とそれが展開される環境の両方に依存します。
DBA が「ねぐらを支配する」文化を扱っている場合は、ストアド プロシージャ ベースのアーキテクチャを展開する方が簡単です。一方、ストアド プロシージャの管理とバージョン管理は非常に困難な場合があります。
コード ジェネレーターは、実行時ではなくコンパイル時にエラーをキャッチできるため、静的に型付けされた言語を使用する場合に役立ちます。
ORM は、インストールごとに異なる RDBMS とスキーマを処理する必要がある統合ツールに最適です。1 つのマップを変更すると、アプリケーションは Oracle 上の PeopleSoft との連携から、SQL Server 上の Microsoft Dynamics との連携に移行します。
コード ジェネレーターの制限を回避するためにストアド プロシージャを微調整できるため、Generated Code を使用してストアド プロシージャとやり取りするアプリケーションを見てきました。
最終的に唯一の正解は、解決しようとしている問題と、ソリューションを実行する必要がある環境によって異なります。それ以外は、'potato' の正しい発音について議論しています。
私は2セントを追加します:
ストアド プロシージャ
ORM
コードジェネレーター
すべてに長所と短所があり、多くはアーキテクチャに依存することに同意します。そうは言っても、私は理にかなっている場合はORMを使用しようとしています。機能の多くは既に存在しており、通常は SQL インジェクションの防止に役立ちます (さらに、車輪の再発明を回避するのに役立ちます)。
詳細については、このトピックに関する他の 2 つの投稿 (動的 SQL とストアド プロシージャと ORM) を参照してください。
動的 SQL とストアド プロシージャ
アドホック クエリとストアド プロシージャのどちらが優れているか?
ORM とストアド プロシージャ
NHibernate によって生成されるパラメータ化された SQL は、ストアド プロシージャと同じくらい高速なのはなぜですか?
ORM とコード ジェネレーターはフィールドの片側にあり、ストアド プロシージャは別の側にあります。通常、グリーンフィールド プロジェクトでは ORM とコード ジェネレーターを使用する方が簡単です。これは、作成するドメイン モデルに合わせてデータベース スキーマを調整できるためです。ソフトウェアが「データファースト」の考え方で書かれると、それをドメインモデルでラップするのが難しいため、レガシープロジェクトでそれらを使用することははるかに困難です.
そうは言っても、3 つのアプローチすべてに価値があります。ストアド プロシージャは最適化が容易ですが、アプリケーション自体で繰り返される可能性のあるビジネス ロジックを格納したくなる場合があります。スキーマが ORM の概念と一致する場合、ORM は適切に機能しますが、そうでない場合はカスタマイズが困難になる可能性があります。コード ジェネレーターは、ORM の利点の一部を提供しますが、生成されたコードのカスタマイズを可能にするため、良い中間点になる可能性があります。再生成するたびに変更する必要があります。
唯一の正解はありませんが、私はオブジェクト ファーストの考え方で考える方が理にかなっていると信じているため、ORM 側に傾倒しています。
独自のカテゴリに値する重要なオプション、つまりiBatisなどのハイブリッド データ マッピング フレームワークを忘れていました。
私は iBatis に満足しています。オブジェクト指向コードを本質的にオブジェクト指向のままにし、データベースを本質的にリレーショナルのままにし、3 番目の抽象化 (オブジェクトと関係の間のマッピング層) を追加することでインピーダンスの不一致を解決するからです。一方のパラダイムを他方のパラダイムに強制的に適合させようとするのではなく、2 つをマッピングします。
ストアド プロシージャ
ORM
少なくとも一部の ORM では、ストアド プロシージャへのマッピングが許可されています
コード生成