3

asp.net mvc 2 アプリケーションがあります。DTO とドメイン エンティティの作成に混乱があります。

MVC コントローラーの統合ポイント: 1) サードパーティの WCF 2) DB レイヤー

WCF は、特定の会社の個人情報と会社に関するいくつかの情報を返しています。

WCF のプロキシを生成し、プロキシにサービス ラッパーを記述しました。サービス ラッパーは WCF と通信しており、結果を DTO クラスの ContactsDTO サービス レイヤーにマッピングすると、別のプロジェクトになります。

以下は私のドメインクラスです

Company
Person

DTO class
//it contains
class ContactsDTO
{
Person person, Company[] company
}

コントローラー アクションは companyID でラッパーを呼び出し、DTO クラスのオブジェクトを取得します。dto から会社情報を更新します。セッション内の会社情報を更新し、Company[] 配列を他の操作に渡します。

DB インタラクション:

いくつかのビジネス ロジックに応じて、個人 ID と会社 ID を他の情報と共にデータベースに挿入する必要があります。

このために私は別のものを作成しました

class DBDTO
{
Person person, Company[] company, OtherInfo otherInfo[]

}

この DBDTO が準備され、DB レイヤー (Linq to sql を使用) に渡されます。

質問

書き方ですかね。DTO インタラクションの改善はありますか? 全体的なアーキテクチャを改善するために私ができるすべての変更

4

2 に答える 2

0

DB にバインドされたオブジェクトを DTO に変換する (時間がかかる) 代わりに、POCO (Plain Old CLR Objects) を使用し、ドメイン モデル、DB に格納できるオブジェクト、およびコントローラーに伝達されるオブジェクトとして直接使用することもできます。視覚化のために。これで始めることができます: POCO エンティティの操作

このアプローチにはいくつかの利点があります

  • POCO エンティティは、基礎となる DB 実装から独立しています
  • POCO エンティティは、データベースがなくても単体テストできます
  • DataContractSerializerまたはDataContractJsonSerializerを使用して、サービス応答に簡単にシリアル化できます (API を構築している場合)。
于 2013-03-24T23:29:14.060 に答える
0

私は、異なる責任のためにモデルを区別するという Algirdas に同意します。

ところで、MVC はレイヤーの概念ではありません。それは、3 つの責任とそのコラボレーションの概念です。階層化によく (誤) 使用されますが、「MVC」を適用してアプリケーション層のみを分離すると、SRP で問題が発生します。レイヤーごとに MVC がある場合は、うまくいきます。

結局のところ、小さなアプリケーションの場合、クリティカル マスに達してアーキテクチャに問題が発生することはありません。

于 2015-05-13T13:41:52.947 に答える