2014-09-30 48 views
0

我希望這還沒有得到回答,但我甚至不知道要搜索什麼。在哪裏存儲與模型相關的方法

我有一個MVC項目,我需要從數據庫返回一個用戶列表。夠簡單。但我只想返回某些用戶。再次,簡單的東西。

我感到困惑的是,我不知道應該在哪裏放置代碼。如果我把它放在控制器中,我會用多種方法得到相同的代碼,並分佈在多個控制器上。

我目前已經把方法返回到我的dbcontext類的用戶。這有效,似乎有道理,但我想知道是否有更好的方法來做到這一點?那個班最終會在一個更大的項目中變得更大。

我看過使用存儲庫類,但似乎是添加一個額外的圖層。我正在使用EF6,並沒有進行任何單元測試(尚未)

下面的代碼顯示了我的dbcontext類的結構(爲了保持簡短,我編輯了實際代碼)。

public class LeadsDB :DbContext 
{ 
    public LeadsDB() 
     : base("Leads") 
    { 
    } 

    public DbSet<User> Users { get; set; } 

    public IEnumerable<SelectListItem> GetUserList(bool includeBlank = true) 
    { 
     return UserList; 
    } 
} 
+0

存儲庫將是您下一個合乎邏輯的步驟。這層很好。位於業務邏輯和數據庫訪問代碼之間。 – 2014-09-30 22:05:52

+0

IMO你的'LeadsDB'類很好,絕對沒有意義在其上添加另一個抽象。 – mxmissile 2014-09-30 22:08:26

+0

@mxmissile,你不知道他的解決方案有多大,所以暗示有*絕對*沒有意義添加另一層抽象是狹隘的。沒有激進的答案......取決於他在做什麼以及他的解決方案將取得多大成功,有不同的方法來實現他想要實現的目標。 – 2014-09-30 22:13:32

回答

0

正如他們所說:

在計算機科學中的所有問題都可以通過間接的另一個層面......除了間接的層次過多的問題得到解決。

因此,根據您的應用程序的大小和範圍,您需要確定有多少間隔層可以讓您在應用程序的可維護性方面達到最佳狀態。

如果您的應用程序將非常小,請繼續將這些方法直接放到您的上下文中。如果它的大小足以讓你的DbContext變得難以維護,我會創建存儲庫。等等。

在我正在處理的應用程序中,我們只與實體框架進行數據相關操作交互。我們所有的倉庫都會返回抽象爲我們數據模型的DTO。我們的控制器進一步將大多數DTO轉換爲ViewModels,然後將它們傳遞給視圖。控制器和存儲庫之間有一個「管理器」層來處理業務邏輯和安全檢查。我們結束了很多層面,但我們發現在解耦視圖,演示文稿,業務,安全和數據模型方面有價值。

+1

感謝StriplingWarrior,和其他人回覆。這個項目將會相當小,所以我會繼續做我正在做的事情。 – Wayne 2014-09-30 22:38:40

0

這看起來像一個實體框架DBContext;如果是這樣,那麼使用它作爲你的數據層。

可能考慮使用「業務層」抽象模型來爲對象做更多的事情。你的數據訪問層應該做只需即:使用數據。

如果你有一個singleton類作爲業務層,那麼你可以使用數據層直接處理數據,然後使用業務層將業務邏輯應用到該數據並將其返回給您的演示文稿層(無論是網站,窗體等)

業務邏輯層可能會檢查緩存中的數據,如果它不存在,然後從您的數據層檢索它,將其放入緩存並將其返回到您的表示層。

相關問題