避免Web应用程序中代码重复的策略

时间:2016-04-15 17:18:14

标签: javascript c# angularjs visual-studio code-duplication

我正在尝试为代码重复的大问题找到最佳解决方案。我们有ASP.NET Web Api后端,Angular前端。我们的后端解决方案还有多个项目,其中包含Business LogicDAO,用于访问数据库。

现在,问题是我们有多个客户,每个客户都有不同的用户界面,有时候代码不同Javascript,但后端保持不变。因此,目前,对于每个客户,我们在Visual Studio中创建了一个新项目,几乎所有客户端代码都被复制+ UI更改,并且后端的所有Controllers也被复制,以及文件为Global.asax,OWIN auth等。

这变成了噩梦,有很多代码重复,维护起来很痛苦。我认为有一些选择:

  • 为每个客户提供不同的.js.css.html文件,但仅针对我们更改的文件,然后在部署时告诉Visual Studio哪个文件为根据配置进行部署(我不知道这是否可行)
  • 找到一些工具,允许我们有条件地更改javascript中的代码,Visual StudioWeb.config执行不同部署配置的方式
  • 寻找代码的另一种方法/架构?

2 个答案:

答案 0 :(得分:1)

您可以在多个解决方案中引用项目。

我会建立一系列共同的项目,然后是个人客户项目,这些项目可以吸引并完成"网络应用程序。

将最终客户项目作为模板以确保不会遗漏任何内容可能是谨慎的做法。

答案 1 :(得分:1)

您需要做的是将多个系统转换为product line

产品系列是软件代码库,加上由(产品)功能驱动的配置管理[在OP的情况下,功能可能是客户名称]。这些功能指定特定产品系列实例的特定属性。配置管理工具使用功能规范来挑选相关软件库的各个部分,并将其添加到产品的基线(完全共享)部分。良好的功能管理将允许某些功能暗示或拒绝其他功能,以帮助最大限度地减少为产品线实例获取正确功能集的问题。

产品线不易构建;但是,以特别的方式管理大量系统非常相似甚至更难。

您可以使用开源工具,例如XVCL [一种"条件编译"适用于任何类型的源代码]或商业软件包(如BigLever)以实现产品线。

要从当前状态进入托管产品线,您需要了解当前系统共享的内容,它们的变化方式以及发明词汇表以将变体描述为功能。你可以手动(痛苦地)做到这一点。您可能会使用(JavaScript-capable) Clone Detector做得更好,并专注于language-specific commonality extraction.如果您的软件有多种工件(HTML,JavaScript,SQL,构建脚本......),您可能会发现{ {3}}具有建设性。