23

私はこのデザイン コンセプト全体に不慣れで、ここ数週間の読書で多くの情報を集めましたが、散らばっていて矛盾しているように見えます。条件はまちまちで、私はこれを理解するのに苦労しています。

私が使用しているパターンは次のようなもので、次のような流れを想定しています。

MVC アプリケーション
コントローラーは、特定のビューに対するクライアントからの要求/応答を処理します。コントローラーのアクション メソッド内で、サービス (サービス レイヤー) に接続し、オブジェクトを要求してビュー モデルを構築し、ビュー モデルからオブジェクトを送り返します。

ビュー モデル ビュー
との間で強く型付けされたビュー モデルを使用しています。

ビュー モデルは DTO ですか? Name、AddressLine1、Address City などの単純なプロパティだけを含めるか、複雑なプロパティや複数のオブジェクトなどを含める必要があります。

ビューモデルでの検証です。もしそうなら、それは必須フィールド、フィールド長などの検証になりますか?ユーザー名などの検証は既に存在しますか、それともサービス層の他のオブジェクトと対話する必要がある場所ですか?

ビュー モデルに EF から返された POCO クラスのみを含めることはできますか?それとも AutoMapper を使用する必要がありますか?

AutoMapper と DTO を使用している場合、DTO のクローンは POCO クラスですか?

コントローラー、ビュー モデル、または下のサービス レイヤーにマップしますか?

サービス
私にとって、サービスとは、EF から POCO オブジェクトを取得するためにリポジトリに接続するオブジェクトです。これは、すべてのビジネス ロジックが存在する場所です。サービスがオブジェクトをリポジトリに戻して EF に永続化すると、それらは有効なオブジェクトと見なされます。これは正しいです?

リポジトリ
それらにはビジネス ロジックはありません。サービスと EF の間でオブジェクトを転送するためにのみ使用されます。これは正しいです?ここでは、汎用リポジトリを使用してインターフェイスを実装しています。次に、特別なニーズに合わせて汎用リポジトリを拡張できますか?

用語に関する質問
1) ビジネス オブジェクトはドメイン オブジェクトと同じですか。ドメイン オブジェクトにはどのくらいのロジックを含める必要がありますか?

2) ドメイン モデルは EF モデルですか? モデルファーストのアプローチを使用しています。

3) 依存性注入 - これを使用する必要がありますか? 私はそれがどのように機能するかを理解していますが、本当の利益を得られません. 私はNinjectで遊んでいました。

コミュニティは、コード サンプルを含むすべてのベスト プラクティスを含むある種の wiki から恩恵を受けると思います。そこにそのようなものはありますか?出回っているサンプルの多くは非常に単純であり、Microsoft のサンプルの多くは、主張して​​いる場合でもこのパターンを使用していません。

これを手伝ってくれるすべての人に前もって感謝します。

ところで-StackOverflowには、「Accept Answer」チェックボックスの横にある「Buy Me A Beer」ボタンが少し必要だと思います:)

4

1 に答える 1

30

ビュー モデルは DTO ですか?

コントローラーとビューの間の一種のデータ転送オブジェクトと見なすことができます。

Name、AddressLine1、Address City などの単純なプロパティだけを含めるか、複雑なプロパティや複数のオブジェクトなどを含める必要があります。

理想的には単純なプロパティですが、他のビュー モデルを集約することもできますが、そこにはモデルがありません (例: EF モデルなど)。

ビューモデルでの検証です。

検証ロジックには 2 種類あります。サービス レイヤーに入るビジネス検証 (例: ユーザー名が既に存在する) と、ビュー モデルに入る UI 検証 (例: ユーザー名が必要) です。

ビュー モデルに EF から返された POCO クラスのみを含めることはできますか?それとも AutoMapper を使用する必要がありますか?

ビュー モデルに EF はありません。ビュー モデルは、単純なプロパティと他のビュー モデルを指すその他の複雑なプロパティを持つ POCO クラスです。また、モデルが意図した特定のビューに表示されるデータを適切にフォーマットするためのメソッドを含めることもできます。

AutoMapper と DTO を使用している場合、DTO のクローンは POCO クラスですか?

この質問を理解しているかどうかわかりません。

コントローラー、ビュー モデル、または下のサービス レイヤーにマップしますか?

コントローラー。

私にとって、サービスはリポジトリに接続して EF から POCO オブジェクトを取得するオブジェクトです。これは、すべてのビジネス ロジックが存在する場所です。サービスがオブジェクトをリポジトリに戻して EF に永続化すると、それらは有効なオブジェクトと見なされます。これは正しいです?

はい。

ドメイン モデルは EF モデルですか?

EF コードの最初のアプローチを使用している場合は、はい、それ以外の場合はいいえ (EF が EF 固有の属性とクラスでドメインを汚染する場合)。

ビジネス ロジックはありません。サービスと EF の間でオブジェクトを転送するために使用されるだけです。これは正しいです?

はい。

ここでは、汎用リポジトリを使用してインターフェイスを実装しています。次に、特別なニーズに合わせて汎用リポジトリを拡張できますか?

はい、でも派手になりすぎないでください。通常、リポジトリは CRUD 操作用です。ビジネス ロジックを含める必要があるのはサービスです。

ビジネス オブジェクトはドメイン オブジェクトと同じですか?

はい。

ドメイン オブジェクトにはどのくらいのロジックを含める必要がありますか?

これは、作業している特定のプロジェクトのドメイン ロジックの量と、自分または他の誰かが作業した古いプロジェクトから再利用できる既存のドメイン ロジックに依存します。

依存性注入 - これを使用する必要がありますか?

そのとおり。

仕組みは理解しているが、本当のメリットが得られない

アプリケーションのさまざまなレイヤー間の結合が弱くなるため、単体テストや他のプロジェクトでの再利用が容易になります。

コミュニティは、コード サンプルを含むすべてのベスト プラクティスを含むある種の wiki から恩恵を受けると思います。

同意します。

そこにそのようなものはありますか?

疑わしい。

ところで-StackOverflowには、「回答を受け入れる」チェックボックスの横にある「ビールを買う」ボタンが少し必要だと思います

これ以上同意することはできません。

于 2011-02-27T23:12:13.593 に答える