為什么需要分離?
我們知道MVC項目各部分職責比較清晰,相比較ASP.NET Webform而言,MVC項目的業務邏輯和頁面展現較好地分離開來,這樣的做法有許多優點,比如可測試,易擴展等等。但是在實際的開發中,隨着項目規模的不斷擴大,Controller控制器也隨之不斷增多。如果在Controllers文件夾下面有超過兩位數controller,即便采用良好的命名規范,或者用子文件夾的形式區分不同功能的控制器,還是會影響項目的可閱讀性和可維護性。因此,在一些場景下,如果能把與某功能相關的文件分離到一個獨立的項目中是非常有用的。Asp.Net MVC提供了Areas(區域)的概念達到這一目的。
例如 我們需要開發將 前台和后台項目分離開來我們可以使用 Areas 項目分層
網站項目 下分 前台網站,用戶系統,博客系統,論壇系統,經銷商系統,總網站后台等 項目分層能更簡單的管理前端頁面及源代碼維護。這里只是一個演示代碼所以沒有將程序代碼分離到新項目里去去。
項目解決方案
前台路由 前台顯示頁:/new/index 所屬控制器:demo.Controllers.NewController
public class MvcApplication : System.Web.HttpApplication { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("Default", "{controller}/{action}", new { controller = "Home", action = "Index" }, new string[] { "demo.Controllers" }); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } }
后台路由 后台顯示頁 :/VIVI_HY_ADMIN/new/index 所屬控制器:demo.Areas.VIVI_HY_ADMIN.Controllers.NewController
public class AdminAreaRegistration : AreaRegistration { public override string AreaName { get { return "VIVI_HY_ADMIN"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute("VIVI_HY_ADMIN", "VIVI_HY_ADMIN/{controller}/{action}", new string[] { "demo.Areas.VIVI_HY_ADMIN.Controllers" }); } }
這樣,我們就可以把所有與后台管理相關的Controller和View文件放到/Areas/Admin下面,以此類推,可以添加諸如會員(Member),博客(Blog),論壇(Forum)等多個Areas。各部分都有自己的頂層文件夾,物理文件都分離開來,管理起來比較方便。
項目DEMO
項目DEMO
運行環境: VS2010 MVC3 演示數據庫:ACCRESS(MDB)