【问题标题】:How to DRY up some code如何干掉一些代码
【发布时间】:2017-07-21 05:24:08
【问题描述】:

假设在一个电子商务网站上,有两种方法可以添加商品,一种来自目录,一种来自购物车...

<btn class="add_item" data-type="cart"></btn>
<btn class="add_item" data-type="catalog"></btn>

因为这两个函数都是关于添加项目的,所以有很多重叠之处。但是,由于它们发生在不同的地方,因此也存在一些差异。是否有关于哪种代码格式遵循标准原则(例如 SRP、DRY 等)的约定?

我特意询问了一个约定,因为我正在尝试编写更多“标准”代码。 FWIW,从历史上看,我一直使用选项 B,我觉得这最终使我走上了非常长的函数的道路,其中嵌套的 if/thens 令人困惑。

选项 A

$(".add_item[data-type='cart']").click(function() {
  doSomethingUniqueToCart();
  doSomethingSharedToAdd();
})

$(".add_item[data-type='catalog']").click(function() {
  doSomethingUniqueToCatalog();
  doSomethingSharedToAdd();
})

选项 B

$(".add_item").click(function() {
  if ($(this).data("type") == "cart") {
    doSomethingUniqueToCart();
  } else {
    doSomethingUniqueToCatalog();
  }
  doSomethingSharedToAdd();
})

【问题讨论】:

    标签: jquery dry


    【解决方案1】:

    我有选项 C 给你:

    var functionList = {
    "cart":doSomethingUniqueToCart,
    "catalog":doSomethingUniqueToCatalog
    }
    $(".add_item").click(function() {
      functionList[$(this).data("type")]();
      doSomethingSharedToAdd();
    });
    

    【讨论】:

      【解决方案2】:

      通常,附加特定侦听器比附加通用侦听器更有效,并且必须查询信息以区分情况。我可能会做类似的事情,

      $(".add_item[data-type='cart']").click(doSomethingUniqueToCart);
      $(".add_item[data-type='catalog']").click(doSomethingUniqueToCatalog);
      $(".add_item").click(doSomethingSharedToAdd);
      

      【讨论】:

        猜你喜欢
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-10
        • 1970-01-01
        • 2019-12-15
        • 1970-01-01
        相关资源
        最近更新 更多