2009-11-12 74 views
1

我正在完成使用ASP.NET MVC,LINQ2QL和存儲庫設計模式重寫項目管理工具。跟隨NerdDinner例子。哪裏可以在ASP.NET MVC/Linq2Sql項目中添加*高級*業務邏輯?

我有一個名爲Task的類,它具有TaskStages的子列表。爲了這個例子,階段已經準備就緒,正在開發和完成。我跟蹤任務上的當前階段,但每次階段更改時,我都想將任務歷史記錄寫入任務階段表。

我很努力地在哪裏放置這個功能並保持可測試性。它是否在控制器中?庫?或部分班?

如果這是一個設計問題,請讓我知道!

回答

2

你可以通過兩種方式處理這種情況。

個人而言,我將創建位於Controller和數據訪問(存儲庫/ LINQ2SQL)之間的業務對象。然後,您將使用這些對象作爲您的模型,並通過它們與數據進行交互。

您也可以將邏輯放在控制器中,但是如果應用程序有多個區域需要執行相同的操作,則必須在整個控制板上重複該邏輯。

+0

我真的想讓應用程序變得簡單,所以如果我不需要創建一個真正的*業務對象,那就是我想要的方式。爲了正確地測試它,我想我必須把它放在控制器中...不是? – mattruma 2009-11-12 21:05:46

+0

我想知道如果我可以只添加update()方法到存儲庫,那麼我可以在那裏做我的支票? – mattruma 2009-11-12 21:25:18

+0

回購實際上不應該只針對業務邏輯 - 只有數據訪問。如果必須的話,把它放在控制器中。必須像賈斯汀,我會建議另一層抽象:域對象和服務層。這不是一個大量的工作,你會立即收到獎勵。 – 2009-11-13 16:39:11

0

我是新來的ASP.NET MVC,但我會有一個方法改變階段,並把邏輯跟蹤這些方法(必要時重構)的變化。總之,我不認爲這屬於控制器明確。

+0

我在想同樣的事情......但是在* how *中掙扎。我將不得不創建一個存儲庫實例來完成我需要做的任何數據訪問。 – mattruma 2009-11-12 21:06:42

2

...每次舞臺改變我想 寫一個歷史記錄到任務 舞臺表。

你需要有一個服務,是負責更改階段:

public interface IStageChanger { 
    void Rename(Task t, string newName); 
    // etc 
} 

我掙扎在哪裏把這個 功能,並保持 可測性。它是否在 控制器?庫?或部分 類?

都沒有。服務水平。你可以有負責編寫的歷史,所以造成IStageChanger的實施將與此類似其他服務:

public class StageChanger : IStageChanger { 
    public StageChanger(ITaskHistoryWriter historyWriter) { 
     // 
    } 

    public void Rename(Task t,string newName) { 
     history.Write(t, /*whatever*/) 
    } 
} 

然後你使用DependencyInjection容器(溫莎或類似)只要求你換服務。