データベースにアクセスするための最良の戦略を決定しようとしています。これは一般的な質問であり、唯一の適切な答えがないことは理解していますが、探しているものに関するガイドラインをいくつか提供します。ここ数年、私たちは独自の永続化フレームワークを使用してきましたが、これも限定的ではありますが同様に機能しています。ただし、いくつかの大きな改善が必要であり、そのようにするか、既存のフレームワークのいずれかを使用する必要があるかどうか疑問に思っています。私が探している基準は、重要な順に次のとおりです。
クライアント コードは、データベースの知識がなくても、クリーンなオブジェクトで動作する必要があります。カスタム フレームワークを使用する場合、クライアント コードは次のようになります。
SessionManager セッション = 新しい SessionManager(); オーダー order = session.CreateEntity(); order.Date = DateTime.Now; // その他のプロパティを設定します OrderDetail detail = order.AddOrderDetail(); detail.Product = 製品; // その他のプロパティ
// 今すぐすべての変更をコミットします session.Commit();
できるだけシンプルで、「柔軟性がありすぎない」必要があります。ほとんどのことを行うには、単一の方法が必要です。
- オブジェクト指向プログラミングを適切にサポートする必要があります。1 対多および多対多の関係を処理し、継承を処理し、遅延読み込みをサポートする必要があります。
- 構成は、XML ベースであることが望ましいです。
私の現在の知識では、次のオプションがあります。
- 現在のフレームワークを改善する - 問題は、かなりの労力が必要なことです。
- ADO.NET Entity Framework - よく理解していませんが、複雑すぎてレビューが悪いようです。
- LINQ to SQL - オブジェクト指向のプラクティスを適切に処理できません。
- nHibernate - 良いオプションのようですが、古いエラーが多すぎると報告するユーザーもいます。
- SubSonic - 簡単な紹介からすると、柔軟性が高すぎるように思えます。私はそれを望んでいません。
何を提案しますか?
編集:
精巧な答えをありがとうクレイグ。カスタム フレームワークについて詳しく説明すると、さらに役立つと思います。似たようなものを探しています。カスタム フレームワークの仕組みは次のとおりです。
- これは DataSet に基づいているため、最初に DataSet を構成し、そこに必要なクエリを記述します。
- DataSet テーブルをオブジェクトにマップする方法を指定し、それらの間の関連付けも指定する XML 構成ファイルを作成します (すべての種類の関連付けをサポートします)。3. カスタム ツールが XML 構成を解析し、必要なコードを生成します。4.生成されたクラスは、共通の基本クラスから継承します。
フレームワークと互換性を持たせるには、データベースが次の基準を満たしている必要があります。
- 各テーブルには、主キーとして 1 つの列が必要です。
- すべてのテーブルには、クライアントで生成された同じデータ型の主キーが必要です。
- 継承を処理するために、単一テーブルの継承のみがサポートされています。また、XML ファイルは、ほとんどの場合、何かを達成するための単一の方法を提供します。
私たちが今サポートしたいのは:
- DataSet から依存関係を削除します。SQL コードは自動的に生成されますが、フレームワークはスキーマを生成しません。DB スキーマを手動で制御したい。
- 継承階層のより強力なサポート。
- オプションの LINQ との統合。
私が探しているものがより明確になったことを願っています。