2011-12-29 76 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 2011-12-29 07:45:50

相關問題