簡體   English   中英

如何重用稍有不同的代碼

[英]How to reuse a code which is slightly different

關於如何正確設計和實現兩種方法,我遇到了一些困難。

我有2種方法,A和B。方法A做2件事情,方法B只做1件事情。 方法A所做的事情之一與方法B所做的事情相同,因此從方法A內調用方法B是非常合理的。

現在的問題是,這兩種方法都需要向用戶發送一封電子郵件。 當我調用A時,我希望收到1封電子郵件,而當我調用B時,我也希望收到1封電子郵件。 這意味着,如果我在A內調用方法B,現在我將在執行1個操作(=調用A)的同時收到2封郵件。 為了使在B中簡單包含B更具誘人性,這兩種方法的設置過程實際上都是相同的,因此除了重做B中的設置之外,我還可以簡單地使用A中的這些設置數據來調用方法B。但是,當直接調用B時,我沒有提供設置數據,因此在這種情況下,我仍然需要進行設置。

解決此類問題的最佳方法是什么? 我是不是該:

  1. 在方法B中添加一個參數,在該方法中,我將說出是否應該發送電子郵件以及設置數據的另一個參數
  2. 將兩個方法分開,因為方法B在兩個上下文中做的事情並不完全相同
  3. ...其他建議?

PS。 我不確定stackoverflow是否真的適合這樣的問題,請讓我知道是否有更好的stackexchange平台。

謝謝你的任何想法

我也不知道這是否真的是話題。 那個...

在我看來,“發送電子郵件”是方法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);
        }

我建議您進一步分離功能。

當前,您可以使用兩種方法來描述:

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

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

因此,一個相當簡單的答案是將兩種方法中的實際功能位提取為它們自己的方法,並留下類似於上述內容的外殼。 每個DoThingX方法都可以返回構建電子郵件等所需的內容。

當然,如果DoThingX方法真的很小(例如, DoThingX兩行),那么以這種方式將它們分開可能沒有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM