如何将大型MVC 4应用程序划分为多个较小的应用程序?

我在Visual Studio 2013中有一个“ ASP.NET MVC 4 Web应用程序 ”,分为多个区域。

该项目规模扩大到我目前在应用程序中有大量区域的程度。

有一个特定区域可以在另一个MVC 4应用程序中自行分离。 我创建了一个新的MVC 4应用程序并将此区域移动到该应用程序。

这些是我面临的问题:

  1. 移动的区域使用原始应用程序中其他类的代码。 具体来说,共享区域包含一些属性以及BaseController
  2. 移动区域的视图也使用JS脚本和其他内容。 大多数情况下,使用过的脚本不是独占的或特定于使用它们的区域。 因此内容在许多领域之间交叉引用。

这是我尝试过的:

  1. 为了解决编译错误,我尝试将旧MVC应用程序的引用添加到新的MVC应用程序,以便新应用程序中的类可以看到旧应用程序中的其他类,例如共享区域中的类。 但是,这似乎没有解决问题。
  2. 为了修复JS脚本和内容问题,我创建了一个解决方案文件夹并将所有脚本移动到它。 但是,由于编译错误,我无法validation是否可行,因为我可以启动应用程序。

这是我的问题:

  1. VS2013是否提供了一些工具来分离MVC应用程序或使应用程序引用来自另一个应用程序的代码和内容?
  2. 你认为做出这种分离的最佳策略是什么?

我试图搜索SO和Google如何完成这种分离。 但是,我发现似乎适用于以前版本的MVC和VS. 因为我是新的MVC领域和MVC的概念,所以我无法解决这个问题。

我会对这个问题采取更一般的观点。 它不是一个ASP.NET MVC问题,而是一个.NET代码组织问题。 我不相信有任何一种特定的规范方法,而是根据您的偏好以及您的项目/团队的工作方式提供帮助。

我将关注的整体项目是将代码拆分为单独的程序集并创建资产管道。

拆分程序集允许您的项目根据需要独立编译和重新编译。 如果您需要在Web服务中跨机器拆分并在其他相关项目(如WCF服务)中重用,或者如果您需要根据您的要求执行GAC特定程序集等操作,则可以获得额外的好处。

将事物放入管道只会使共享和管理更容易。

以下是一些建议:

  • 您的解决方案中不需要1个单片项目,因为它听起来就像您拥有的一切。 将事物划分为多个项目,从而产生多个程序集。 您还可以为应用程序的独立部分提供多个解决方案,这些解决方案不需要运行其他部分。

  • 从在整个应用程序中共享的任何“后端”和“业务”逻辑开始。 例如,如果您有多个视图使用的CustomerService类,请将其放入MyCompany.MyApp.Services之类的内容中。 显然,如果最终添加大量项目,您获得的粒度越精细,您的命名就越具体。

  • 特别是对于MVC类型的项目,通常很容易将模型拆分为一个或多个程序集。 示例:MyCompany.MyApp.SomeGroupingName1.Models和MyCompany.MyApp.SomeGroupingName2.Models,或者简单地将1作为MyCompany.MyApp.Models

  • 您也可以将控制器拆分为多个组件,与前一点相同。

  • 您可以将UI中的任何类型的组件抽象到它们自己的程序集中,同样适用于视图。

  • 如上所述使用解决方案文件夹。

  • 如果需要,引入资产管理库以帮助构建和解决资源捆绑。 如果库尚未执行此操作,您可以创建一个资源管道,插入该管道以缩小css和js。 然后在您的应用程序中,您只需在所需页面中引用所需的包,而不是始终每页手动包含所有内容或在整个应用程序中共享整个站点中的所有内容。

  • 在可能的情况下,首选组合而不是inheritance。 从你的post中可以看出,但是我已经看到许多人试图实现一个问题,为每个控制器,视图等规则都是基类。它可能会起作用,正如他们所说,直到它没有。 使用基类和inheritance仍然是一个好主意,但是不要将执行不同操作的多个事物绑定到同一个基本实现。 此时,如果您需要强制执行某种合同,那么界面可能更符合您的要求。

最后一点:如果您将内容管道中的内容捆绑在一起,则客户端可以最大限度地减少下载脚本的次数(如果您正确执行),并且您可以让浏览器尝试将其缓存到其他页面。 有时更好地将大文件压缩一次,而不是将每个页面的许多网络连接分配到不容易缓存的不同文件或在视图中内联的内容。