質問

C# アプリケーションを設計しています

  • プレゼンテーション (Web サイト + Flex アプリ)
  • ビジネス論理層 (マルチクライアント プラットフォームを有効にするための WCF の可能性があります)
  • データ アクセス層 (NHibernate を使用)

私たちは、多くの既存のクライアントのデータベース環境にソリューションを統合する予定で、DAL で NHibernate を使用したいと考えています。私の同僚は、NHibernate を使用してクライアントの DB (ユーザーやイメージなど) からクラスを生成すると、DB が変更されるたびに BLL が爆発する原因になると指摘しました。では、問題は、どうすればそのようなことが起こらないようにするかということです。ビジネス オブジェクトを作成し、AutoMapper を使用して NHibernate オブジェクトをこれらの BO (うーん、DTO になるのですか?) にマップし、DAL の変更が BLL に影響しないようにすることを考えています。これでいいでしょうか?

ありがとう !

編集 :

私たちが達成しようとしていることをよりよく理解するには、コンテキストが必要になる場合があります。弊社では主にフロントエンドはFlex、バックエンドはC#で写真保存・共有アプリを構築しているため、コードやDBなどあらゆる部分を担当しています。

しかし :この製品は階層ごとに購入することもでき、最終的にはユーザー テーブルまたはイメージ テーブルを含むデータベースがすでに存在します。ここで私は、数億行の Image テーブルを持っている新しい見込み客について考えていますが、テーブルの ALTER に時間がかかりすぎるため、ビジネス ロジックの列を追加することはできません。

たとえそれが可能であっても (行数が少ないため、ユーザー テーブルなどは変更できます)、BLL から層データベースに統合する必要があるたびに、ソリューション全体に影響を与えずにテーブル構造の変更を処理する方法を自問しています。 Flex のクライアント アプリに!

役に立ちましたか?

解決

私の経験では、ビジネス オブジェクト (別名ドメイン オブジェクト) は、実際のビジネス エンティティとテーブルを第 3 正規形で表現するために OO でモデル化する必要があります (これは、速度とファイル サイズを考慮した設計によって異なる場合があります)。

Hibernate は、マッピング ファイルを使用して BO とテーブルの間をマッピングする必要があります。

これで正当なケースが得られました。

  • 列を追加/削除する必要があります。addressline4 を削除することにしました。これにより、Address オブジェクトの変更がエコーされます。それで問題ありません。
  • 列をより適切な場所に移動すると、Client オブジェクトにはメモが含まれています。このメモは現在 Contract_Extra テーブルに保存されており、Client テーブルに移動されます。この場合、列をより適切な場所に移動してもマッピング ファイルにのみ影響します。

包括的な推論があるとは思えませんが、例を見てこれについて考えていただければ幸いです。

複数の DB で NH を試したことはありませんが、同様に試してみるべきです 各データベースには独自のサービスがトップにあります?

ここにいくつかのリンクがあります

お役に立てれば

他のヒント

あなたは、データベースに依存しないようにドメインモデルを設計したいのように

これが鳴ります。私も、複数の異なるデータベースモデルにオーバーマップすることができ、中央ドメインモデルを有することに最善のアプローチに興味を持っています。

あなたはコードジェネレータを使用して、各データベースからDTOのを作成するために、提案されている方法は、オプションである可能性があります。もう一つは、各既存のデータベースのカスタムNHibernateのマッピングを作成することです。あなたはまだマッピングのいくつかはあまり困難にするために、いくつかのDTOを使用する必要があるかもしれませんが、それはあなたがより多くの制御を与えることができます。

これらは、単にいくつかの考えです。 NHibernateはとのより多くの経験のあるユーザーは、おそらくあなたの状況に優れた洞察力を持つことになります。

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