私はこのデザインコンセプト全体を初めて勉強しています。ここ数週間、私は多くの情報を集めましたが、散らばって矛盾しているようです。用語は混在していて、私はちょうどこれを念頭に置いて苦労しています。MVC3アプリケーション/サービスレイヤ/リポジトリレイヤ/ POCOクラス/ EF4 - 質問!
私が使用していたパターンは次のようであり、以下のように流量を想定:
MVCアプリケーション
コントローラ(単数または複数)は、所与のビューのクライアントからの要求/応答を処理します。コントローラのアクションメソッドの中で、それらはサービス(サービスレイヤ)に連絡し、オブジェクトを要求してビューモデルを構築し、オブジェクトをビューモデルから元に戻します。
ビューモデル
私はビューに強く型付けされたビューモデルを使用しています。
ビューモデルはDTOですか? Name、AddressLine1、Address Cityなどの単純なプロパティを含むか、複雑なプロパティ、複数のオブジェクトなどが含まれている必要があります。
ビューモデルでの検証ですか。そうであれば、必須フィールドやフィールド長などの検証となります。ユーザー名のような検証はすでに存在していますか、サービスレイヤー内の他のオブジェクトと対話する必要があるのでしょうか?
ビューモデルにEFから返されたPOCOクラスのみが含まれているか、AutoMapperを使用する必要がありますか?
AutoMapperとDTOを使用している場合、DTOのPOCOクラスのクローンはありますか?
コントローラ、ビューモデル、または下のサービスレイヤにマッピングしますか?
サービス
私には、サービス(複数可)POCOバックEFからオブジェクトを取得するためのリポジトリ(複数可)に連絡するオブジェクトです。これは私のビジネスロジックのすべてです。サービスがオブジェクトをEFに永続化するリポジトリに戻すと、それらは有効なオブジェクトとみなされます。これは正しいです?
リポジトリはそれらには、ビジネスロジックはありません
、彼らは単にサービス(複数可)とEF間でオブジェクトを転送するために使用されています。これは正しいです?ここでは汎用リポジトリを使用してInterfacesを実装しています。次に、特別なニーズのためにジェネリックリポジトリを拡張することができますか?
質問
1)ビジネスオブジェクトはドメインオブジェクトと等しいですか?ドメインオブジェクトにはどのくらいの論理が含まれていますか?
2)ドメインモデルはEFモデルですか?私はModel-Firstアプローチを使用しています。
3)依存性注入 - これを使用すべきですか?私はそれがどのように機能するのか理解しています。本当の利益を得られません。私はNinjectで遊んでいた。
コミュニティには、コードサンプルを含むベストプラクティスを含むいくつかの種類のウィキが役立つと思います。そこにそんなことがありますか?多くのサンプルは非常にシンプルであり、多くのMicrosoftサンプルは主張していてもこのパターンを使用していません。
私はこれを持っていて、これで私を助けてくれるすべての人に事前に感謝します。ところで
- 私は「答えを受け入れる」チェックボックスの横にあるボタン「ミービールを買う」、StackOverflowのが少し必要だと思います:)
arin - AutoMapperとDTOを使用している場合、DTOのPOCOクラスのクローンはありますか?私が言いたいのは、顧客の基本情報を住所と注文の集まりで表示するという見解があったとすると、View Modelには顧客の基本的なプロパティがあり、次にアドレスと注文。これらのコレクションはPOCOオブジェクトのプロパティですか、POCOの注文クラスとアドレスクラスを模倣し、ビューモデルでそれらを使用するクラスをMVCアプリケーションに作成する必要がありますか? – Sam
@ダリン - POCOを使用してEFから生成されたクラスは、モデルファーストのアプローチを使用するか、コードファーストのメソッドを閉じますか? POCOクラスはかなり裸である。ここを見てください:http://www.striano.net/Customer.vb.txt、これは汚染されていますか? – Sam
@Sam、顧客の基本情報をアドレスとオーダーの集合で表示するビューが必要な場合は、基本プロパティを含むCustomerViewModelを構築し、「AddressViewModel」と「OrderViewModel」を組み込みます指定された顧客に対して自分の住所と注文について表示したいプロパティと、 'CustomerViewModel'は' AddressViewModel'と 'OrderViewModel'という2つのコレクションプロパティを持つことができます。 –