javascript - 在哪里填充数据?内部方法还是外部方法?

标签 javascript

我对在哪里填充数据感到进退两难。

下面是两种计算报价单总价的方法:

// example in javascript
function computePrice(quotation) {
    var totalPrice = 0.00;
    var items = quotation.getItems();

    for (var i = 0; i < items.length; i++) {
        totalPrice += items[i].getPrice();
    }

    return totalPrice;
}

QuotationDao.populateItems(quotation);
computePrice(quotation);

另一种写法是:

function computePrice(quotation) {
    var totalPrice = 0.00;

    // Populate items in the quotation from database
    QuotationDao.populateItems(quotation);

    var items = quotation.getItems();

    for (var i = 0; i < items.length; i++) {
        totalPrice += items[i].getPrice();
    }

    return totalPrice;
}

computePrice(quotation);

我问过我的同行并收到了不同的意见。

  1. 方法 #1 是正确的,因为代码不应在函数中检索数据,除非该函数纯粹是为了检索目的而创建的。

  2. 方法 #1 是正确的,因为它允许进行单元测试。

  3. 方法#2是正确的,因为调用该方法之前不需要外部依赖,该方法具有高内聚性。

  4. 所有方法都不完整,QuotationDao.populateItems(quotation) 应该像 QuotationDao.getComputePriceData(quotation) 一样在单独的方法中,结果像 computePrice(computePriceData); 一样传递给 computePrice;

您对我应该走哪条路线有什么建议吗?

最佳答案

如果有人申请Law of Demeter ,也称为“最少知识原则”,以及Single Responsibility Principle ,然后有人想写这样的代码:

Quotation q = dao.fetchQuotation(someCondition);
totalPrice = q.getTotalPrice(); //Computation inside it

如果计算比较复杂,不只是将报价单中的各个项目的值相加,那么,可以采用单独的方法:

Quotation q = dao.fetchQuotation(someCondition);
totalPrice = PriceHelper.getTotalPrice(q); //Computation inside it

这两种方法同样可测试(需要适当的模拟/ stub )

如果您仍然感到困惑,那么问自己一个问题 - “哪种方法可以让我编写易于理解的代码” - 当我遇到这种困境时,我发现《整洁代码》这本书非常有用

关于javascript - 在哪里填充数据?内部方法还是外部方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152377/

相关文章:

javascript - 视差 - 让文本以 1/10 的速度滚动

javascript - 使用构造函数创建一个新对象并在 javascript 中调用函数

javascript - meteor 法无尽运行

javascript - 什么情况下函数不能访问全局变量?为什么?

javascript - 如何在最新版本的 React Native 中使用 Navigator?

javascript - 从其他数组对象设置数组对象

javascript - 找不到模块 'nodemailer'

javascript - Amcharts:为雷达柱系列的项目着色

javascript - 从文件路径解析 JSON 无法正常工作

javascript - 如何使用 JavaScript 将数据从 Excel(xlsx、csv)导入到 HTML 页面?