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

Javascript web应用程序中避免代码重复的策略,javascript,c#,angularjs,visual-studio,code-duplication,Javascript,C#,Angularjs,Visual Studio,Code Duplication,我正试图为代码复制的大问题找到最佳解决方案。我们有一个ASP.NET Web Api后端和一个Angular前端。我们的后端解决方案还拥有多个项目,其中包含用于访问数据库的业务逻辑和DAO 现在,问题是我们有多个客户,每个客户都有不同的UI,有时使用不同的Javascript代码,但后端保持不变。因此,目前,我们为每个客户在Visual Studio中创建了一个新项目,几乎所有客户端代码都被复制+UI更改,来自后端的所有控制器也被复制,以及文件Global.asax、OWIN auth等 这正成

我正试图为代码复制的大问题找到最佳解决方案。我们有一个
ASP.NET Web Api
后端和一个
Angular
前端。我们的后端解决方案还拥有多个项目,其中包含用于访问数据库的
业务逻辑
DAO

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

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

  • 为每个客户提供不同的
    .js
    .css
    .html
    文件,但仅针对我们更改的文件,然后在部署时,根据配置告诉
    Visual Studio
    要部署哪个文件(我不知道这是否可行)
  • 找到一些工具,使我们能够有条件地更改javascript中的代码,就像
    Visual Studio
    Web.config
    中对不同部署配置所做的那样
  • 为代码寻找另一种方法/架构
您可以在多个解决方案中引用一个项目

我会建立一系列的普通项目,然后是个人客户项目,这些项目会拉入并“完成”web应用程序


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

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

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

产品线不容易建立;但是,以一种非常类似的临时方式管理一大堆系统就更难了

您可以使用开源工具(如[一种跨任何类型源代码工作的“条件编译”)或商业软件包(如)来实现产品线


要从您当前的状态进入托管产品线,您需要发现当前系统共享什么、它们如何变化,并发明一个词汇表以将变化描述为功能。你可以用手(痛苦地)做那件事。如果你的软件有多种工件(HTML、JavaScript、SQL、构建脚本等),你可能会发现a是有建设性的。

这是否更适合程序员。se?如果版主这样认为,请随意上移:)我不会回答这个问题,因为这实际上很难做到,并且可能取决于你的VC系统。我实际上拆分了项目,其中后端代码位于一个目录中,每个项目的前端代码位于另一个目录中,公共angularJS代码位于git子树中。要启动一个新的客户机项目,我们需要将基础项目的前端和后端分支(这样我们就可以设置连接字符串等)。特定于客户端的更改超出了客户端项目的子树。对于downvoter,您是否介意解释为什么会进行downvote?如果人们不能理解问题,通常会进行downvote。这很糟糕,但我见过不止一次。没那么简单,由于.Net基本上强制一种结构,在这种结构中,您的服务都与客户端代码混杂在一起,所有的pfm意味着您没有太多机会了解各种项目的所有依赖关系是如何相互关联的,直到事情变得非常困难。这个答案基本上是以一种特别的方式说“构建产品线”。请参阅我的答案,以获得更有条理的方法。OP对依赖性的反对基本上是正确的;它们必须以一种有组织的方式捕获,以便生成的系统不会中断。