繁体   English   中英

Javascript (Node.js) - 重构长 function

[英]Javascript (Node.js) - Refactoring a long function

我有一个 function,它与特定概念“通知”相关联。

创建模块“Notifications.js”后,我编写了以下内容:

function Notifications() {} // No constructor...

Notifications.sendPushNotification = async function (
  title,
  body,
  data,
  badge = undefined,
  sound = "default",
  pushNotificationsTokens
) {
    // Part 1 - 6 lines

    // Part 2 - 10 lines
    
    // Part 3 - 20 lines
}

module.exports(Notifications);

然后,我还考虑通过以下方式使代码更好:

Notifications.sendPushNotification = async function (
  title,
  body,
  data,
  badge = undefined,
  sound = "default",
  pushNotificationsTokens
) {
    part1();
    part2();
    part3();

    function part1() {
       // 6 lines
    }

    function part2() {
       // 10 lines
    }
    
    function part3() {
       // 20 lines
    }
}

module.exports(Notifications);

说到这里,我想到了另一个问题:

即使它们只有 static 方法,在独立模块中创建类是否也是一种代码风格? 我见过一些 GitHub 存储库,不同的开发人员在其中执行此操作。 但为什么? 这种方式是否与 DDD 之类的编程方法相关联? 执行上面的代码和这段代码有区别吗?

通知.js

exports.sendPushNotification = async function (
  title,
  body,
  data,
  badge = undefined,
  sound = "default",
  pushNotificationsTokens
) {
    part1();
    part2();
    part3();

    function part1() {
       // 6 lines
    }

    function part2() {
       // 10 lines
    }
    
    function part3() {
       // 20 lines
    }
}

另外,有没有更好的方法来重构这个 function? 例如,一些专业的方法来传递 arguments 的长列表,使用较短的名称,或类似的东西。

是的,保持代码重构是一个好习惯。 我经常使用 async 模块来处理我的异步函数。 您可以在https://caolan.github.io/async/v3/找到该模块。 如果这些函数不是异步的并且您的函数依赖于变量。 您应该使用以下策略进行重构。 这只是我遵循的一个建议。

exports.sendPushNotification = async function (
  title,
  body,
  data,
  badge = undefined,
  sound = "default",
  pushNotificationsTokens
) {
    let var1 = part1(title);
    let var2 = part2(body, var1);
    let var3 = part3(var1, var2);
    
    // ...do some calculations
}


function part1(title) {
   // 6 lines
}

function part2(body, param1) {
   // 10 lines
}

function part3(param1, param2) {
   // 20 lines
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM