Entity Framework を使用して WinForms アプリケーションで N 層設計を開発しようとしています。
次のサンプル フローは、Entity Framework を使用して n 層設計で新しいレコードを保存する場合に正しいですか?
プレゼンテーション層
A) UI は、ライト スクリーン入力データの検証を実行します。次に、UI はビュー モデルを DTO に変換し、それをアプリケーション層に渡します。
アプリケーション層
A)アプリケーション層はDTOをドメイン層のドメインモデルに送信します
ドメイン層
A) ドメイン モデル SoftwareRequest エンティティの新しいインスタンスを作成する前に、ビジネス ルールに準拠するために着信 DTO 値を検証します。
B) すべての値が検証されたら、ドメイン モデル SoftwareRequest エンティティの新しいインスタンスを作成します。
C) 終了してアプリケーション層に制御を戻す
アプリケーション層
A) Infrastructure Layer SoftwareRequest リポジトリを呼び出し、ドメイン モデルによって提供された新しいドメイン モデル SoftwareRequest エンティティを渡します。
インフラストラクチャ層のデータ アクセス
A) SoftwareRequest リポジトリは、アプリケーション層から新しいドメイン モデル SoftwareRequest エンティティを受け取ります。
B) 新しいドメイン モデル SoftwareRequest エンティティをエンティティ フレームワーク DBContext に追加する - context.SoftwareRequests.Add(NewDomainModelEntity)
C) 新しいエンティティを保存する - context.SaveChanges()
D) 終了して制御をアプリケーション層に戻す
アプリケーション層
A) 保存操作の結果を DTO に変換する
B) 終了して、新しい SoftwareRequest を追加した結果を含む DTO を使用して制御を UI に戻します。
UI
A) 受信した DTO を View Model に変換する
B) View Model データを画面に表示し、新しいソフトウェア要求を追加した結果を示します。
--------- 2016 年 2 月 22 日午前 6 時 49 分 (PST) に追加された以下の情報 ---------
依存関係の概要:
プレゼンテーション層 - アプリケーション層を参照してリクエストを行います - UI から送信されるかアプリケーション層から受信される DTO を記述するインターフェイスを操作する目的でのみドメイン層を参照します
アプリケーション層 - DTO を記述するドメイン層インターフェースを参照します。また、ドメイン モデル エンティティのインターフェイス定義を使用して、インフラストラクチャ レイヤーからのエンティティ応答を UI に返される DTO に変換できるようにします。インフラストラクチャ レイヤー データ アクセスへの参照もここにあるため、関連するドメイン モデル エンティティがドメイン レイヤーによってルールと値について検証された後、CRUD 操作を実行するためにリポジトリにアクセスできます。
ドメイン レイヤー - 上下のレイヤーへの参照はありません。どのレイヤーからも依存関係が注入されたサービスはありません。これには、インフラストラクチャ リポジトリでの CRUD を含むタスクは含まれません。ルールの検証などのすべての要求は、要求されたドメイン タスクを実行するために必要なすべての情報を含む DTO を受け取ります。
インフラストラクチャ レイヤー データ アクセス - リポジトリでエンティティ フレームワーク操作 (つまり、CRUD 操作) を実行するために使用されるドメイン モデル エンティティを記述するドメイン レイヤー インターフェイスを参照します。ここでインフラストラクチャ層のデータ アクセスに実装されているリポジトリのインターフェイスの定義については、ドメイン層も参照します。この層では DTO は使用されません。この層は通常、ドメイン モデル エンティティでアプリケーション層に応答します。アプリケーション層は、すべてのドメイン モデル エンティティの応答 (IEnumerable など) を DTO に変換し、UI に送り返します。