質問

データベースにアクセスするための最適な戦略を決定しようとしています。これは一般的な質問であり、良い答えは一つもないことを理解していますが、私が探しているものに関するガイドラインを提供します。 過去数年間、私たちは独自の永続化フレームワークを使用してきました。しかし、いくつかの大きな改善が必要であり、私はその方法に行くべきか、それとも既存のフレームワークのいずれかを使用すべきか疑問に思っています。私が探している基準は、重要度順に次のとおりです。

  1. クライアントコードは、クリーンなオブジェクトで動作し、データベースの知識はありません。カスタムフレームワークを使用する場合、クライアントコードは次のようになります。

    SessionManager session = new SessionManager(); 注文= session.CreateEntity(); order.Date = DateTime.Now; //他のプロパティを設定します OrderDetail detail = order.AddOrderDetail(); detail.Product = product; //その他のプロパティ

    //すべての変更を今すぐコミット session.Commit();

  2. できるだけ単純で、「柔軟性が高すぎない」必要があります。ほとんどのことを行う単一の方法が必要です。

  3. オブジェクト指向プログラミングを適切にサポートする必要があります。 1対多および多対多のリレーションを処理し、継承を処理し、遅延読み込みをサポートする必要があります。
  4. 構成はXMLベースであることが推奨されます。

現在の知識では、これらのオプションが表示されます:

  1. 現在のフレームワークを改善する-問題は、かなりの努力が必要なことです。
  2. ADO.NET Entity Framework-よく理解していないが、複雑すぎるようで、レビューが悪い。
  3. LINQ to SQL-オブジェクト指向のプラクティスを適切に処理できません。
  4. nHibernate-適切なオプションのようですが、一部のユーザーは古すぎるエラーを報告します。
  5. SubSonic-簡単な紹介から、柔軟性が高すぎるようです。欲しくない。

何を提案しますか?

編集:

詳細な回答をありがとう、クレイグ。カスタムフレームワークの詳細を説明すると、さらに役立つと思います。似たようなものを探しています。これがカスタムフレームワークの仕組みです:

  1. DataSetに基づいているため、最初に行うことは 必要なデータセットとクエリを記述します。
  2. DataSetテーブルをオブジェクトにマップする方法を指定し、それらの間の関連付けを指定するXML構成ファイルを作成します(すべての種類の関連付けをサポート)。 3.カスタムツールがXML構成を解析し、必要なコードを生成します。 4.生成されたクラスは、共通の基本クラスから継承します。

フレームワークとの互換性を保つには、データベースが次の基準を満たしている必要があります。

  1. 各テーブルには主キーとして単一の列が必要です。
  2. すべてのテーブルには、同じデータ型の主キーが クライアント。
  3. 継承を処理するには、単一のテーブル継承のみがサポートされます。また、XMLファイルは、ほとんど常に何かを達成するための単一の方法を提供します。

今サポートしたいのは:

  • DataSetから依存関係を削除します。 SQLコードは自動的に生成されるはずですが、フレームワークはスキーマを生成するべきではありません。 DBスキーマを手動で制御したい。
  • 継承階層のより強力なサポート。
  • LINQとのオプションの統合。

探しているものがより明確になることを望みます。

役に立ちましたか?

解決

  

現在のフレームワークを改善する-問題は、かなりの努力が必要なことです

あなたの質問では、他の多くの場所から利用できる機能を書き換える理由を説明していません。質問で指定していないORMの固有のニーズがない限り、ORMの再発明は時間の有効な活用ではないことをお勧めします。

  

ADO.NET Entity Framework

私たちは、実世界でEntity Frameworkを運用ソフトウェアとして使用しています。複雑ですか?私が知る限り、他のほとんどのORMほどそうではありません。つまり「かなり複雑です」。ただし、比較的新しいものなので、コミュニティの経験やドキュメントはあまりありません。 NHibernateのようなものより。そのため、ドキュメントがないため、より複雑に見えるかもしれません。

Entity FrameworkとNHibernateは、オブジェクトとリレーショナルの格差を埋めるという問題に対して明らかに異なるアプローチを取っています。これについては、

他のヒント

LLBLGen は、必要なほとんどすべてを実行する非常に優れたORMツールを作成します。

iBATIS は、SQLをより細かく制御できるため、私のお気に入りです

Developer Express Persistence Objectsまたは XPO (最もよく知られている)。 3年間使用しています。商用であり、開発のために別の会社(単一の会社)と自分自身を結び付けることを除いて、必要なすべてを提供します。それ以外は、Developer Expressは.NETプラットフォームに最適なコンポーネントおよびフレームワークプロバイダーの1つです。

XPOコードの例は次のとおりです。

using (UnitOfWork uow = new UnitOfWork())
{
  Order order = new Order(uow);
  order.Date = DateTime.Now();
  uow.CommitChanges();
}

城からのActiveRecord をご覧になることをお勧めします 実稼働経験はありませんが、サンプルアプリで遊んでみました。本当に簡単に作業できるように思えますが、すべての要件に適合するかどうかを知るのに十分な知識はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top