2016-11-08 6 views
1

私はエンティティフレームワークを使用することに興味があります - 新しいデータベースでコードを最初に移行し、データとビジネスレイヤーにPOCOコードを複製することに関するいくつかの質問/懸念があります。コードの最初の移行で異なるレイヤーにPOCOコードを複製

アイデアは、私のPOCOエンティティを含むデータアクセスレイヤーに、文字列の長さなどのデータベーススキーマタイプのアイテム、ボックス外で動作しない外部キー関連のアイテム、その他のもので飾られていることです。この層は、スカラー値、エンティティ、集合体、およびIEnumerablesを返すリポジトリとしても機能します。

上記は、リポジトリとのやり取りやビジネスロジックの話などを扱うビジネスレイヤーです。

プレゼンテーションレイヤーが上部にあります。このレイヤーはビジネスレイヤーと通信し、データレイヤーについてはわかりません。すべてが理解できるのはビューモデルです。私はこのレイヤーで、ビューモデルだけを使ってMVCパターンを実装します。

私が実行している問題は、ビューモデルとデータモデルのマッピングをどこで行うべきかと関係しています。プレゼンテーションレイヤーでビューモデルを定義すると、ビジネスレイヤーはそれらが存在することを認識しません。

  • ビジネスレイヤでビューモデルを定義する方がよいか、プレゼンテーションレイヤが認識してマッピングを実行できるビジネスレイヤでドメインモデルのセットが必要ですか?
    • ドメインモデルの追加セットは、データレイヤーで定義されたモデルの大きな重複ですか?
+0

モデルは、クライアントとビジネス層の両方が参照できる場所に存在する必要があります。そうすることで、それらは2つのレイヤー間のデータコントラクトとして機能します。ビジネスレイヤはDALと対話できますが、合意したデータコントラクトを常にクライアントに返すことができます。これは、モデルがビューとコントローラとは別のプロジェクトにあることを意味します。 – SteveR

+0

私はそれを考えていた - それは私のMVCプロジェクトで空のモデルフォルダを持って変わっているようだが、多分それは私が乗り越える必要があるかもしれない何かです。私は存在していない他のオプションについて知りたいと思っています:) – MavisBeacon

+0

ビジネスロジックはビューモデルを参照する必要がありますか? –

答えて

2

プロジェクトの範囲に応じて、私は通常、以下の二つの方法のいずれかを使用:

1)全ての層は別にドメインモデルのセットを有し、全ての層の参照を持っていますそれら。 長所:レイヤはまだ独立しており、モデルの重複はなく、レイヤモデルをマップする必要はありません。 短所:ドメインモデルの変更はすべてのレイヤーに影響します。 DBの変更により表示が中断することがあります

2)各層にモデルがあります。ビジネスレイヤーはそれ自身のモデルをデータレイヤーのレイヤーにマップし、プレゼンテーションレイヤーはそのモデルをビジネスレイヤーのレイヤーにマップします 長所:すべてのレイヤーは1つのことを行い、基底モデルの変更はレイヤーを伝播しません 短所:可能性とマッピングを維持する必要があります

最初のアプローチは、小規模なアプリケーションと「直接更新」シナリオで最も効果的です。二番目のアプローチは、複数の可動コンポーネントを持つ大規模なプロジェクトで効果的です。

P.S. 「ビジネス・レイヤーでのビュー・モデルの定義」は明確なノー・ノーです。

+0

さまざまなオプションを分割していただきありがとうございます。共通のアセンブリですべてのモデルを定義することは理にかなっていると思います。奇妙に感じられるのは、データアクセス外のレイヤーのデータベーススキーマ情報にデータアノテーションを使用していることだけです。 – MavisBeacon

+1

あなたが気が気になる場合は、常にポコをきれいに保ち、エンティティをEntityTypeConfiguration <> – Fran

+0

を使って別のアセンブリにマッピングすることができます。ありがとう! – MavisBeacon

関連する問題