如何重用略有不同的代码

本文关键字:代码 何重用 | 更新日期: 2023-09-27 18:26:38

关于如何正确地设计和实现两种方法,我遇到了一些困难。

我有两种方法,A和B。方法A做两件事,方法B只做一件事。方法A所做的事情之一与方法B所做的相同,因此从方法A中调用方法B是非常合理的。

现在的问题是,这两种方法都需要向用户发送一封电子邮件。当我调用A时,我想收到1封电子邮件,当我调用B时,我也想收到1封邮件。这意味着,如果我在A内部调用方法B,我现在将在执行1个操作(=调用A)时收到2封邮件。为了让简单地将B包含在A中更具吸引力,两种方法的设置过程确实是相同的,因此我可以简单地用A中的这些设置数据来调用方法B,而不是在B中重新进行设置。但在直接调用B时,我没有设置数据可供提供,因此在这种情况下,我无论如何都需要进行设置。

解决这样一个问题的最佳方法是什么?我应该:

  1. 在方法B中添加一个参数,我将在其中说明是否应该发送电子邮件,以及设置数据的另一个参数
  2. 将这两个方法分开,因为方法B在这两个上下文中并没有做完全相同的事情
  3. 。。。其他建议

PS。我不确定stackoverflow是否真的适合这样的问题,请告诉我是否有更好的stackexchange平台。

感谢您的任何想法

如何重用略有不同的代码

我建议您进一步拆分功能。

目前有两种方法可以这样描述:

void MethodA()
{
    DoThing1();
    DoThing2();
    SendEmail();
}
void MethodB()
{
    DoThing1();
    SendEmail();
}

因此,一个相当简单的答案是将这两个方法中的实际功能部分提取到它们自己的方法中,并留下类似于上面的shell。每个DoThingX方法都可以返回构建电子邮件等所需的任何内容。

当然,如果DoThingX方法真的很小——例如几行左右——那么以这种方式分解它们可能没有意义。

我也不知道这是否真的是主题。也就是说。。。

在我看来,"发送电子邮件"是方法A需要完成的方法B工作中包含的内容之一。因此,为什么不直接在方法B中实现它呢?然后方法A在调用方法B时免费获得它。

如果电子邮件的确切内容根据是否调用了方法A而有所不同,那么请确定…您可以在方法B中添加一个参数,以某种方式自定义电子邮件。

最后,你对细节含糊其辞。目前还不清楚通过从方法A调用方法B可以节省多少代码。如果这很重要,那么我强烈支持这样的代码共享。但如果我们只是在谈论一句话,那么。。。这似乎不太值得烦恼;也许在每个方法中都放一个相同的语句会更好。

抱歉回答含糊。GIGO.:)

您可以对我们的电子邮件内容使用方法的返回:

private String funcA() {
    // foo
    return "Mail from funcA";
}
private String funcB() {
    funcA();      // ignoring the return value here, we later return our on
    // foo
    return "Mail from funcB";   // our own return
}

然后你在这些功能之外发送电子邮件(只是示例代码):

private void mainFunc() {
    String mail = condition ? funcA() : funcB();
    sendMail(mail);
}

我有两个想法:

  • 创建表示A和B的通用功能的C方法,并使用不同的参数调用A和B中的C
  • 在A中调用B,但单独提取邮件功能以分离方法C

澄清第一个想法:

methodA() {
        firstAction();
        secondAction(Parameter parameterFromA);
        }
methodB() {
        secondAction(Parameter parameterFromB);
        }