我什么时候应该在Javascript中创建一个新对象?

时间:2017-01-12 09:58:26

标签: javascript node.js

我使用此包mailgun-js发送电子邮件。首先,我需要创建一个mailgun的新实例,然后使用它来发送电子邮件,这是我的代码的简单版本:

const mgInstance = mailgun({
  apiKey: '...',
  domain: '...',
});

function sendMail1() {
  mgInstance.messages().send(/* ... */);
}

function sendMail2() {
  mgInstance.messages().send(/* ... */);
}

此代码工作正常。我只是想知道是否在每个函数中移动用于创建新mailgun实例的代码,如下所示:

function sendMail1() {
  const mgInstance = mailgun({
    apiKey: '...',
    domain: '...',
  });

  mgInstance.messages().send(/* ... */);
}

function sendMail2() {
  const mgInstance = mailgun({
    apiKey: '...',
    domain: '...',
  });

  mgInstance.messages().send(/* ... */);
}

我的问题是:这些实施之间有什么不同吗?他们之间有更好的一个吗?

1 个答案:

答案 0 :(得分:1)

鉴于mailgun工厂函数足够轻,我会使用包装工厂:

function getMailerInstance() {
  return mailgun({
    apiKey: '...',
    domain: '...'
  });
}

function sendMail1() {
  const mgInstance = getMailerInstance();

  mgInstance.messages().send(/* ... */);
}

这样,您也可以在调用mailgun之前轻松切换到单例模式或执行其他计算逻辑,等等。

我还会创建一个通用sendMail函数来处理......好吧,发送邮件,让其他函数调用它,而不是直接使用Mailgun的API。因此,如果您需要切换邮件API,则只需更改代码的一小部分(即getMailerInstancesendMail)。

另请注意我是如何使用通用名称getMailerInstance代替getMGInstance的,它将您的代码绑定到Mailgun。

另外,请考虑在getMailerInstance中返回承诺。