我目前受雇的公司正在努力应对我们的应用范围的架构决策。目前我们有几个具有共同部分的应用程序(想象日历模块)。到目前为止,我们一直在从其他现有应用程序复制代码,但在未来我们希望将应用程序发展为更加模块化的设计:
如上图所示,每个应用程序可能有不同版本的模块。
我们正在考虑可能的解决方案:
对此有何建议?我们不能成为第一个努力解决这个问题的公司吗?我们所有的应用程序都是ASP.NET MVC 4/5 Web应用程序,使用Razor模板或JavaScript模板(knockout.js)构建。我们所有的应用程序都部署在Microsoft Azure上,我们拥有广泛的内部知识(MSBuild),CI服务器......
答案 0 :(得分:8)
为每个模块分别进行项目/组装并将其作为Nuget包交付绝对是一个很好的策略。
优势:
挑战:
在开发期间调试使用Nuget安装的汇编代码。 Nuget支持它内置。我们在我们的案例中实现了它(框架被多个平台使用)。
模块代码中需要的代码更改(需要提供错误或新功能)。这很棘手:
选项1:相同的开发人员继续进行更改,创建新包并在他的应用中安装新版本。必须授权更改,因为它是关键代码。
选项2:负责在框架代码中修复问题或变更请求的指定团队。
答案 1 :(得分:2)
您也可以尝试使用插件架构,只需构建构成应用程序的不同模块作为插件,然后将每个应用程序所需的模块构建为单个代码库。在这种情况下,为任何特定用户安装组件将是添加或拔出插件的问题。许多大型项目使您了解这种特定的体系结构,因为它减少了复制和粘贴,增加和重用以及开发速度。您可以查看nopcommerce一个开源项目,了解它是如何完成的。