2011-01-23 66 views
1

目前我已經爲每個數據模型獲得了數據庫訪問類的存儲庫類。尋找在asp.net中處理版本庫的好習慣mvc

在主頁上,我需要顯示來自每個存儲庫的前5條記錄。所以在HomeController中,我需要有很多存儲庫成員,這不正確。有沒有什麼好的解決方案?

非常感謝您的幫助。歡迎任何建議!

回答

4

你可以使用,這將聚集這五個倉庫成單個b服務層有用的操作。示例:

public interface IItemsService 
{ 
    IEnumerable<Item> GetTopItems(); 
} 

並且此服務的實施將根據需要使用盡可能多的存儲庫。現在你的控制器簡單地變爲:

public class ItemsController : Controller 
{ 
    private readonly IItemsService _itemsService; 
    public ItemsController(IItemsService itemsService) 
    { 
     _itemsService = itemsService; 
    } 

    public ActionResult Index() 
    { 
     var topItems = _itemsService.GetTopItems(); 
     return View(topItems); 
    } 
} 

並在視圖:

@model IEnumerable<AppName.Models.Item> 
<h2>Top items</h2> 
@Html.DisplayForModel() 

它使用項目顯示模板(~/Views/Items/DisplayTemplates/Item.cshtml):

@model AppName.Models.Item 
<div>@Model.Title</div> 
1

您可以爲基本操作創建一個通用存儲庫,並在爲每個實體部分創建存儲庫時繼承該存儲庫。

但這種方式你仍然需要5個實例或通用存儲庫。

所以有2種方式:

1)

創建一個存儲庫UniRepo

其中有像Get<T>(int id)泛型方法等

,並在您HomeController

使用2)

不要把倉庫的任何實例中HomeController,而不是

創建5個控制器每個實體,並在每個你把倉庫的一個實例,該列表

,並在創建一個動作家庭/索引視圖你做

@Html.Action("list","entity1"); 
@Html.Action("list","entity2"); 
@Html.Action("list","entity3"); 

Html.Action相當於

的RenderAction
0

我第二達林季米特洛夫的響應。

根據我的經驗,通常(在桌面開發中)有一個服務層,可以與您的存儲庫進行所有通話。

例如

  1. 視圖模型
  2. 服務
  3. Repository1:庫2
  4. 數據存取1:數據訪問2

然後從頂端你永遠只能調用服務(S),其保持一切。