【问题标题】:Strategies to avoid code duplication in web application在 Web 应用程序中避免代码重复的策略
【发布时间】:2016-08-07 18:50:09
【问题描述】:

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

现在,问题是我们有多个客户,每个客户都有不同的 UI,有时会有不同的 Javascript 代码,但后端保持不变。因此,目前,对于每个客户,我们在Visual Studio 中创建一个新项目,其中几乎所有客户端代码都被复制+ UI 更改以及来自后端的所有Controllers 也被复制,以及文件@987654329 @、OWIN 认证等

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

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

【问题讨论】:

  • 这会更适合programmers.se吗?
  • 如果版主这么认为,请随时向上移动:)
  • 我不会给出这个答案,因为它实际上很难做到,并且可能取决于您的 VC 系统。我其实是把后端代码在一个目录下的项目进行了拆分,每个项目的前端代码在另一个目录下,通用的angularJS代码在一个git子树中。要开始一个新的客户端项目,我们“fork”我们的基础项目的前端并分支后端(所以我们可以设置连接字符串等)。客户特定的更改超出了客户项目的子树。
  • 投反对票的人,您介意解释为什么投反对票吗?
  • 如果人们无法理解问题,他们通常会投反对票。很烂,但我不止一次看到过。

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


【解决方案1】:

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

我将构建一系列常见项目,然后构建单个客户项目,这些项目会引入并“完成”网络应用程序。

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

【讨论】:

  • 这不是那么简单,因为 .Net 基本上会强制构建一个结构,在该结构中,您的服务都与您的客户端代码混杂在一起,而所有 pfm 意味着您没有太多机会了解所有依赖项是如何产生的各种项目相互关联,直到事情真的很糟糕。
  • 这个答案基本上说,“建立一条产品线”以一种特别的方式。有关更有条理的方法,请参阅我的答案。 OP关于依赖关系的反对基本上是正确的;它们必须以有组织的方式捕获,这样生成的系统才不会崩溃。
【解决方案2】:

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

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

产品线建设不易;但是以非常相似的临时方式管理一大堆系统就更难了。

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

要从当前状态进入托管产品线,您需要了解当前系统共享的内容、它们的变化方式,并发明一个词汇表来将这些变化描述为特性。您可以手动(痛苦地)做到这一点。使用(JavaScript-capable) Clone Detector 可能会做得更好,并专注于language-specific commonality extraction. 如果您的软件有多种工件(HTML、JavaScript、SQL、构建脚本...),您可能会发现organized process for discovery of commonality across and within multiple levels (see heading "Refactoring to Product Lines") 具有建设性.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2010-10-22
    • 2023-03-14
    • 2014-03-07
    相关资源
    最近更新 更多