2012-08-27 106 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" }); 

其他,你应该是不错的。