2010-03-12 163 views
0

我一直在閱讀關於「胖控制器」的文章,但大多數文章都側重於將服務/存儲庫層邏輯拉出控制器。但是,我遇到了一種不同的情況,我想知道是否有人有任何改進的想法。胖ASP.NET MVC控制器

我有一個控制器太多的動作,我想知道如何能夠用更少的動作將其分解成許多控制器。所有這些操作都負責插入/更新/刪除所有屬於同一個聚合的對象。所以我安靜不熱衷於具有屬於此彙總每個類一個單獨的控制器......

給你更多的細節,該控制器在標籤頁中使用。每個選項卡代表要編輯的數據的一部分,此處使用的所有域模型對象都屬於同一個聚合。

有什麼建議嗎?

乾杯, MOSH

回答

0

對於所有你的標籤,你可以使用一個動作,有一個選項卡參數,即表示你需要返回的數據。

控制器的工作是施放此string選項卡入enum類型的變量。然後該選項卡將被髮送到存儲庫,並且存儲庫作業將響應該選項卡值返回數據。

控制器應該通過服務來完成它的工作:輸入驗證器和映射器。

映射器服務的工作是映射用戶輸入(通常串)轉換成實際類型值(INT,System.DateTime的,枚舉類型等)。

驗證器作業是檢查輸入是否有效。

遵循這個原則應該讓你的控制器真的很小。

+0

由於每個選項卡向用戶返回不同的結果,因此這並不安靜。因此,如果我將所有ViewXXXTab操作合併爲1,那麼我將擁有一個包含大量conditation語句的方法來決定調用哪個方法來獲取數據。例如: 開關(標籤) { case A: Call SomeObject.SomeMethod();案例B: 調用AnotherObject.AnotherMethod();情況C: ... ... } – Mosh 2010-04-01 05:43:26

0

如果你想要簡單和容易的東西,我建議只需根據選項卡將控制器分成部分類。當然,它仍然是一個胖控制器,各種標籤功能之間存在明顯的區別。