2012-08-27 149 views
4

我有一個巨大的MVC應用程序,但不幸的是MVC區域並沒有在初始開發中使用。該應用程序變得如此模塊化,以至於我們認爲使用區域有很好的理由。將整個代碼移動到「Areas」結構是多麼容易或困難.. 是否有任何重大挑戰/代碼重做等等我必須注意的事情? 我可以創建新的區域並將控制器視圖模型移動到相應的桶中嗎?它可以正常工作嗎?我是在簡化事情嗎?如果有人已經採取此路線之前,將不勝感激反饋,意見..MVC代碼重構

+0

開啓視圖編譯功能可能會有所幫助,因此在編譯器移動時會檢查視圖的錯誤(避免它在運行時炸掉)。參見[本博客條目](http://www.tugberkugurlu.com/archive/how-to-detect-errors-of-our-asp-net-mvc-views-on-compile-time-blow-up-in -my-face-theory)的細節。 –

回答

6

該應用程序將工作得很好的地區。它會使維護更容易,並且由於分離而在邏輯上進行查看。但是,你會遇到一些困境。

命名空間

首先將很可能是命名空間。當您將連接的邏輯或模型與依賴關係分開時,如果從屬類位於區域中,則可能需要更改其名稱空間引用。幸運的是,Visual Studio可以通過簡單的「解析」功能來處理這些問題。如果您嘗試編譯並向您顯示存在問題的所有位置,編譯器應該拋出。可能很難預見所有這些事件會發生在哪裏。但是,由於許多不同的控制器所使用的大多數應該位於同一個地方,所以很可能不需要使用許多指令。

路由

只是你使用的每一個動作環節將不得不改變,如果你要使用的區域。你將被迫改變它們來代表新的領域。

沒有區域(基):

@Html.ActionLink("Label For Link", "ActionName", "ControllerName", new { area = "" }, null) 

特定區域:

@Html.ActionLink("Label For Link", "ActionName", "ControllerName", new { area = "SpecificAreaName" }, null) 

您可能還需要修改任何代碼return RedirectToAction你。

基地面積:

return RedirectToAction("ActionName", "ControllerName"); 

具體領域:

比這
return RedirectToAction("ActionName", "ControllerName", new { Area = "SpecificAreaName" }); 

其他,你應該是不錯的。