2008-08-30 43 views
9

因此,我正在着手ASP.NET MVC項目,雖然整體體驗很好,但我對控制器已經變成的意大利麪混亂感到不滿意。我在網上查了一下(CodeCampServer等),他們似乎都遭受了相同的問題,其中控制器方法違反了SRP(單一職責原則)相當一致 - 如控制器方法,如果請求是簡單地呈現視圖一個GET,但更新模型,如果它是一個POST。現在我已經掌握了在整個應用程序中負責多個邏輯路由的控制器方法 - 比方說它檢查在表單上點擊了哪個按鈕並相應地執行操作。我可以使用JavaScript將每個按鈕點擊重定向到不同的表單動作,但是有些東西感覺不太正確......另一個大問題是魔法字符串的泛濫 - ViewData [「foo」] = blah;長話短說,你們如何構建你的控制器邏輯?每個視圖有一個巨型模型對象?很多小控制器方法和JavaScript是路由器?我的目標是可維護的代碼 - 隨着功能的堆積,我開始向下滑動該滑坡...ASP.NET MVC:結構化控制器

回答

8

ASP.NET預覽版5(可在CodePlex上找到)有一個答案:[AcceptVerbs]屬性。菲爾哈克有一個blog post討論如何使用它。

至於視圖數據魔術關鍵問題,這是一個有趣的問題。如果您認爲某個視圖是一羣半獨立的組件(尤其是考慮到新的局部視圖支持),那麼製作一個強類型的模型就變得不那麼理想了,因爲這幾個視圖應該相對獨立於另一個。

0

不同的人是如何處理這個問題的?我知道我只花了幾個小時來查看模型文件夾中的混亂。我發現創建文件夾有助於減少視覺混亂,使用匹配的命名空間也有很大幫助。

但是我的控制器目前是龐然大物。問題在於,我一直專注於學習項目中的這一點(還有很多需要理清的地方)。

我現在已經很好地掌握了MVC,所以現在是複習複雜性並考慮將控制器修改爲更好的命名和更清晰的功能的時候了。

其他人是否將他們的控制器分解爲子控制器? (如果有這樣的事情)

+0

編碼你的控制器的訣竅是看看他們並說'如果每個行動方法是超過20或30行或一些相對較小的數字,我該如何減少它?',基本上,保持它乾燥,重新思考你在做什麼,並將該邏輯移入適當的SERVICE層,可以重複使用。 – 2008-11-13 13:16:46