ASP.NET MVC 5模块化Web应用程序架构?

时间:2015-02-04 12:47:11

标签: c# asp.net-mvc knockout.js architecture modularity

我目前受雇的公司正在努力应对我们的应用范围的架构决策。目前我们有几个具有共同部分的应用程序(想象日历模块)。到目前为止,我们一直在从其他现有应用程序复制代码,但在未来我们希望将应用程序发展为更加模块化的设计:

Our situation

如上图所示,每个应用程序可能有不同版本的模块。

我们正在考虑可能的解决方案:

  • 构建核心应用程序框架,我们可以在其中安装 我们正在考虑像Nuget这样的工具来实现这一目标。
  • 构建一个应用程序,其中所有模块都包含在(=一个代码库)中,但客户只获得为他激活的功能。我们在这里预测版本化的一些问题。

对此有何建议?我们不能成为第一个努力解决这个问题的公司吗?我们所有的应用程序都是ASP.NET MVC 4/5 Web应用程序,使用Razor模板或JavaScript模板(knockout.js)构建。我们所有的应用程序都部署在Microsoft Azure上,我们拥有广泛的内部知识(MSBuild),CI服务器......

2 个答案:

答案 0 :(得分:8)

为每个模块分别进行项目/组装并将其作为Nuget包交付绝对是一个很好的策略。

优势:

  1. 可以维护和发布多个版本。不同的客户端获得不同的版本。
  2. 安装Nuget支持的最新版本或特定版本。这有助于开发期间App A开发人员可以定位模块A的2.0版本,而App B开发人员可以定位1.0。
  3. 单个源代码库,每个版本都有单独的分支。使用1.0请求更改的客户端将从分支1.0获取代码,仅提供所请求的修复。
  4. 每个模块都可以独立发布或更新。
  5. 挑战:

    1. 在开发期间调试使用Nuget安装的汇编代码。 Nuget支持它内置。我们在我们的案例中实现了它(框架被多个平台使用)。

    2. 模块代码中需要的代码更改(需要提供错误或新功能)。这很棘手:

    3. 选项1:相同的开发人员继续进行更改,创建新包并在他的应用中安装新版本。必须授权更改,因为它是关键代码。

      选项2:负责在框架代码中修复问题或变更请求的指定团队。

答案 1 :(得分:2)

您也可以尝试使用插件架构,只需构建构成应用程序的不同模块作为插件,然后将每个应用程序所需的模块构建为单个代码库。在这种情况下,为任何特定用户安装组件将是添加或拔出插件的问题。许多大型项目使您了解这种特定的体系结构,因为它减少了复制和粘贴,增加和重用以及开发速度。您可以查看nopcommerce一个开源项目,了解它是如何完成的。