Asp.net mvc 使用区域构造大型Asp.net MVC应用程序是一个好选择吗?

Asp.net mvc 使用区域构造大型Asp.net MVC应用程序是一个好选择吗?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,每个区域都有自己的配置等。因此,随着区域的增加,复杂性和可维护性也会增加。将模块化、分区和MVC应用程序功能扩展到多个区域,还是继续使用传统的控制器/视图方法,这是一个不错的选择 请推荐一种通用的解决方案或更好的方法来构建大规模MVC应用程序。这些领域不应该令人困惑,当然也不是多余的。正如您所说,它们允许您将web应用程序划分为更小的功能组。当应用程序的规模不断扩大,单个应用程序的保护伞变得难以操作时,这一点非常有用 例如,我刚刚完成了一个大型应用程序,该应用程序存储了北美各个零售商的促销数据。

每个区域都有自己的配置等。因此,随着区域的增加,复杂性和可维护性也会增加。将模块化、分区和MVC应用程序功能扩展到多个区域,还是继续使用传统的控制器/视图方法,这是一个不错的选择


请推荐一种通用的解决方案或更好的方法来构建大规模MVC应用程序。

这些领域不应该令人困惑,当然也不是多余的。正如您所说,它们允许您将web应用程序划分为更小的功能组。当应用程序的规模不断扩大,单个应用程序的保护伞变得难以操作时,这一点非常有用

例如,我刚刚完成了一个大型应用程序,该应用程序存储了北美各个零售商的促销数据。美国和加拿大的销售团队相互隔离,但在几乎相同的业务环境中执行任务


将web应用程序的美国和加拿大部分划分为多个区域是很有意义的,这对我们来说组织起来更好。每个区域仍然可以在有意义的地方使用相同的组件(存储库、服务等),但带来的隔离区域允许我们针对每个业务组构建单独的控制器和视图,不要试图运行一系列逻辑检查来适应用户所在的任何区域。

这里有一个可能的替代方法,来自Jess Chadwick、Todd Snyder和Hrusikesh Panda的“编程ASP.NET MVC 4”:

在设计ASP.NET时有许多不同的方法 MVC应用程序。开发人员可以决定保留应用程序的所有 网站组件内的组件,或将组件分离到 不同的组件。在大多数情况下,最好将 将业务层和数据访问层放入不同的程序集中,而不是 网站。这样做通常是为了更好地隔离业务模型 从UI开始,更容易编写自动化测试,重点是 核心应用程序逻辑。此外,使用这种方法使 可以重用来自其他服务器的业务层和数据访问层 应用程序(控制台应用程序、网站、web服务等)

公共根命名空间(例如,company.{ApplicationName})应为 在所有组件中一致使用。每个组件都应该有一个 与程序集名称匹配的唯一子命名空间。图5-4 显示了Ebuy参考应用程序的项目结构。这个 应用程序的功能分为三个部分 项目:Ebuy.WebSite包含视图、控制器和其他 网络相关文件;Core包含 应用而CustomExtensions项目包含自定义 应用程序用于模型绑定、路由和 控制器。此外,该项目有两个测试项目(不包括 显示):单元测试和集成测试


对于是否使用区域没有任何规则,基本上由解决方案架构师进行评估,以确定使用区域是否带来好处

我们最新的项目涉及多个领域,包括在网站上工作的3种不同类型的用户。我们使用控制器命名方案,其中控制器名称与资源名称匹配(即CategoryController)

但是,所有3个用户组都可以以完全不同的方式访问某些资源:一个用户组只能列出资源,另一个用户组可以管理它们(基本crud),而第三个用户组(类似管理员)可以执行导出、导入等高级功能

通过在区域中分离功能,我们减少了安全问题,只需在区域中装饰控制器以请求特定于该区域的用户类型,以避免混合权限。在该区域的基础控制器上执行此操作,使事情更加集中

这就是我们选择区域分离的原因之一

另一方面,我们经常遇到这样的情况:我们需要一个高要求的公共网站和“后台”内部配置网站。对于性能和可伸缩性+并发性问题,我们经常设计公共网站作为一个项目进行负载平衡,后台网站作为第二个项目只托管一次,而不是使用区域


同样,这只是行业的一种方法,不一定是最佳方法

为什么每个区域都应该有自己的内容文件夹?您可以从站点的主(根)引用内容,而不会出现任何问题。基本上,您只剩下一组控制器/视图,如果这些控制器/视图也位于站点的根目录下,您将拥有这些控制器/视图,但它提供了一种将站点划分为更小的操作块的方法(而不是主站点中的20个控制器,您可能在站点根目录下有12个,在区域a中有8个)。视图也是如此。