2

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

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

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

ありがとう !

編集 :

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

ただし、その製品は層によって購入することもできます。層は、最終的にはユーザーテーブルまたはイメージテーブルを含むデータベースをすでに持っています。ここでは、数億行のImageテーブルがあり、テーブルのALTERが長すぎるために、ビジネスロジックに列を追加することはないという新しい見込み客について考えています。

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

4

2 に答える 2

2

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

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

今、あなたは正当なケースを持っています:

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

包括的な推論があるとは思えませんが、例があなたにこれについて考えさせてくれることを願っています

複数のDbでNHを試したことはありません。また、各データベースに独自のサービスを追加する必要がありますか?

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

お役に立てれば

于 2010-10-02T01:22:48.157 に答える
0

ドメインモデルをデータベースに依存しないように設計したいようです。私も、複数の異なるデータベースモデルにマッピングできる中央ドメインモデルを作成するための最良のアプローチに興味があります。

コードジェネレーターを使用して各データベースからDTOを作成するという、提案している方法がオプションになる可能性があります。もう1つは、既存のデータベースごとにカスタムNHibernateマッピングを作成することです。一部のマッピングの難易度を下げるために、一部のDTOを使用する必要がある場合もありますが、より詳細に制御できる場合があります。

これらはほんの一部の考えです。NHibernateを使用する経験豊富なユーザーは、おそらくあなたの状況についてより良い洞察を得るでしょう。

于 2010-10-01T17:01:06.657 に答える