1

約 100 列の非常に古いデータベース Customer テーブルからデータを取得する 2 つの C# 3 層アプリケーションを構築しています。ビジネス層でいくつかのロジックを実行し、プレゼンテーション層でデータを表示します。

顧客テーブルのレイアウトは -

CustomerID
Firstname
Lastname
DateOfBirth
Othervalue1
Othervalue2
Othervalue3
.
.
Othervalue95
Creationdate
Updatedate

これら 2 つのアプリケーションでは顧客テーブルのみが必要ですが、Entity Framework を使用して新しいデータ アクセス層を構築しています。将来のプロジェクトでは、他のテーブルにアクセスする必要があり、このアクセス レイヤーに追加されます。

Unit of work パターンとリポジトリ パターンを使用します。

私の問題は次のとおりです-

アプリケーション Aには、顧客表の列のサブセットが 1 つ必要です

アプリケーション Bには、顧客テーブルの列の異なるサブセットが必要です (アプリケーション A のニーズと重複する部分があります)。

データ層からこれら 2 つの独立したビジネス層へのマッピングを実行するにはどうすればよいですか? automapper を使用してデータ エンティティ クラスからビジネス レイヤー クラスへのマッピングを実行できることはわかっていますが、2 つの異なるビジネス レイヤー Customer クラスが必要です。

私は DTO について少し読んでいますが、この n 層アプリケーションのどこに行くべきかわかりません。

4

4 に答える 4

3

アプリケーションの設計に基づいて、これらのいずれかを使用できます。
1 - 顧客テーブルを 2 つ以上のエンティティにマップします。
2 - CustomerBase のような基本エンティティと 2 つ以上のサブエンティティを持ちます。
3 - DTO はデータ転送オブジェクトであり、(通常は) 変更可能です。それらを変更しても、DB で CRUD 操作は発生しません。
DTO は次のようなシナリオで使用されます: Customer エンティティは重いオブジェクト (たとえば 100 列) であり、そのデータのサブセット (たとえば 20 列) だけが必要です。DTO オブジェクトと実際のエンティティとの間の変換は、自動マッパー、手動によるオペレーターのオーバーロードなど、さまざまな方法で実装できます。

お役に立てれば

于 2013-02-10T21:42:12.880 に答える
1

私がすることは次のとおりです。

アプリケーション A - 必要なデータを抽出し、それらを新しいクラス (DTO) にマップします。アプリケーション B で同じことを行います。

2 つのアプリケーションにデータベースの共有以外に関係がない場合は、他に何もする必要はありません。つまり、アプリケーション A をアプリケーション B の存在に気付かないようにし、その逆も同様です。

DTO は、n 層アプリケーション全体で共有するオブジェクトの単なる派手な名前です。

于 2013-02-10T21:59:58.950 に答える
1

IOC を使用して、関連するマッパーをデータ レイヤーに挿入できます。

UoW とリポジトリ パターンを使用する必要がありますか? EF は、独自の作業単位を持つデータ アクセスの抽象化です。ビジネス層で DBContext にアクセスし、Linq を使用してデータを DTO に投影できます。

于 2013-02-10T22:20:13.630 に答える
1

レガシー システムで読み取り専用アクセスが必要ですか?

この場合、各アプリケーションでAnti Corruption Layer パターンを使用し、必要な列のみをマップできる 2 つの異なるエンティティ フレームワーク モデルを使用することをお勧めします。

書くのも難しい場合は、すべての列をマップする必要があります。

単一のエンティティ フレームワーク モデルを使用する場合は、dtos を使用してデータのサブセットをマップできます。この場合、自動マッパーが良い解決策になります。

于 2013-02-10T22:48:04.070 に答える