【发布时间】:2021-02-22 11:25:01
【问题描述】:
我有一个函数,它与特定概念“通知”相关联。
创建模块“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);
这里,我想到了另一个问题:
即使它们只有静态方法,在独立模块中创建类是否也是一种代码风格? 我见过一些 GitHub 存储库,不同的开发人员在其中执行此操作。但为什么?这种方式是否与 DDD 之类的编程方法相关联?做上面的代码和这段代码有区别吗?
notifications.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
}
}
另外,有没有更好的方法来重构这个函数?例如,一些专业的方法来传递长长的参数列表,使用较短的名称,或类似的东西。
【问题讨论】:
-
这个问题是软件工程的定义。笼统地说是不可能的,因为它总是取决于具体情况。一个长函数或一个有很多参数的函数表明它可能做的太多了。你是否想对它做点什么取决于它有多复杂,它有多重要,你有多少时间等等。
-
那么定义一个没有构造函数的类,它只有一个静态方法,而不是仅仅导出一个函数呢?
-
静态类方法和函数是等价的。这样做可能有遗留(或未来)的原因。也许有(或将会有)相关的功能,将它们放在一个类中可能会很好。这也有点个人口味了。
标签: javascript node.js module coding-style refactoring