見習い期間中、私はいくつかの小規模なプロジェクトにNHibernateを使用しましたが、そのほとんどは自分でコーディングおよび設計しました。さて、より大きなプロジェクトを開始する前に、データ アクセスを設計する方法と ORM レイヤーを使用するかどうかについての議論が起こりました。私はまだ見習い期間にあり、エンタープライズ プログラミングの初心者であると考えているため、オブジェクト リレーショナル マッパーをデータベースに使用すると開発が大幅に容易になるという私の意見を押し付けようとはしませんでした。開発チームの他のコーダーは私よりずっと経験が豊富なので、彼らの言うことに従うだけだと思います。:-)
ただし、NHibernate または同様のプロジェクトを使用しない主な理由のうちの 2 つを完全には理解していません。
- SQL クエリを使用して独自のデータ アクセス オブジェクトを作成し、それらのクエリを Microsoft SQL Server Management Studio からコピーするだけです。
- ORM のデバッグは難しい場合があります。
したがって、もちろん、多くの s などを使用してデータ アクセス レイヤーを構築することもできますSELECT
が、ここでは、自動結合、プロキシ クラスの遅延読み込み、およびテーブルが新しい列を取得したり、列が改名。(多数のSELECT
、INSERT
およびUPDATE
クエリの更新と、マッピング構成の更新、および場合によってはビジネス クラスと DTO のリファクタリング。)
また、NHibernate を使用すると、フレームワークをよく理解していないと、予期しない問題が発生する可能性があります。たとえば、文字列の長さを自動的に検証するように設定した Table.hbm.xml を信頼することができます。ただし、「単純な」SqlConnection クエリ ベースのデータ アクセス レイヤーにも同様のバグがあると想像できます。
最後に、上記の議論は、重要なデータベース ベースのエンタープライズ アプリケーションに ORM を使用しない正当な理由になるのでしょうか? 彼ら/私が見逃したかもしれない他の議論はおそらくありますか?
(おそらく、これはチームワークを必要とする最初の「大規模な」.NET/C# ベースのアプリケーションのようなものだと思うことを付け加えておく必要があります。単体テストや継続的インテグレーションなど、スタック オーバーフローではごく普通のことと見なされているグッド プラクティスではありません。 -現在までここに存在します。)