2011-12-29 6 views
1

先週、ASP.NET MVC3で開発されたブログエンジンのソースコードをダウンロードしました。コードを分析するとき、私は、彼らがビューモデルを満たすためにデータを取得するために別の方法を使用したことに気付きました。ビューモデルリポジトリをビューモデルで直接インスタンス化する

public ActionResult Details(string slug) 
{ 
    var model = new PostDetailsViewModel(UnitOfWork, slug);   
    return View(model); 
} 

public PostDetailsViewModel(IUnitOfWork unitOfWork, string slug) 
    { 
     _repository = new PostRepository(unitOfWork); 
     Post = _repository.FindBySlug(slug); 
    } 

リポジトリ:

public Post FindBySlug(string slug) 
    { 
     return FindAll().SingleOrDefault(x => x.Slug == slug); 
    } 

コントローラ:ここ

は 'ポスト' ビューモデルの一例です

ご覧のとおり、リポジトリはビューモデル(コンストラクタ内)で直接インスタンス化されています。それは正しい方法ですか? コントローラー>>ビジネス>>リポジトリあなたのアドバイスのための

感謝を:

通常、私はこのようなビジネス層、最終的にサービス層を使用していました。

答えて

2

正しいですか?

私には正しい方法がないようです。通常、ビューモデルではなく、モデル内でこのリポジトリアクセスを行うことができます。また、ビューモデルにPostというプロパティがあるようです。だから彼らは私がしないビューモデルでドメインモデルを参照しています。

コンストラクタ内のリポジトリの特定の実装をハードコーディングする限り、レイヤ間の弱い結合、再利用性、メンテナンス、ユニットテストなどを気にしなければそれ。誰も私たちにIoCが常に行われるべきであることを納得させることはできません。それには長所と短所があります。

+0

ありがとうDarin、これは私が探していたレスポンスです:)私はビューモデル(2か月前に回答しました)にポピュレートする記事を読んでいます。ここにあります:http://stackoverflow.com/questions/7943039/how-are-you-populating-validating-your-viewmodels – Bronzato