簡體   English   中英

在方法中傳遞數據對象或數據對象的一部分?

[英]Passing A Data Object Or Parts Of Data Object In Methods?

public class DataObject{
    public int Value1;
    public int Value2;
    public int Value3;
    public int Value4;
    public int Value5;

    public DataObject(){}
}

public class SomeClass{
    public SomeClass(){}
    public void MultiplyFirstThreeValues(int Value1, int Value2, int Value3){
        return Value1*Value2*Value3;
    }
    public void MultiplyFirstThreeValues(DataObject d){
        return d.Value1*d.Value2*d.Value3;
    }
}

哪個更好的做法是將所需的每個變量發送到方法或整個數據對象(在未使用數據對象中的每個變量的情況下)? 這可能是一個“藝術勝於科學”的問題,但是如果您不能給出一個嚴格的規則,那么我很想聽聽做一個互相做事的動機(在這種情況下,方法中使用了所有數據對象的值)。

謝謝,我期待了解更多有關此的信息。

我會選擇選項C,將邏輯留在對象本身內:

  public class DataObject
  {
    private int Value1;
    private int Value2;
    private int Value3;
    private int Value4;
    private int Value5;

    public DataObject(){}

    public int MultiplyFirstThreeValues()
    {
        return Value1*Value2*Value3;
    }
 }

編輯:為回應評論-我將添加引號:

程序代碼獲取信息然后做出決定。 面向對象的代碼告訴對象去做事情。

這是imo更好的設計方法,因為它可以讓您隱藏實際獲得結果/執行的方式。 當前設置它的方式更多地反映了Visitor模式 ,該模式可能很強大,但是由於類的接口現在具有所有這些公共成員,因此也增加了更多的復雜性。 如果您的計算跨越多個DataObject和/或其他類型,這實際上可能有意義,但是如果可以避免的話,我肯定會使用封裝。

經驗法則:如果您有7個以上的參數(盡管有些參數說超過3個),請考慮使用Introduce parameters對象重構。

通常,如果參數數量少,則傳遞對象的一部分,尤其是在您不希望參數數量及其類型改變的情況下。

如果不是上述情況(您希望更改參數的數字/類型和/或其中許多參數),請使用該對象。


注意:

有許多參數是一種代碼味道,可以表明您的方法/類做得太多,應該分手。

具有許多輸入參數的方法簽名通常被認為是缺少類的指示。 有多少個? 不可能說,但是三個並不令我感到特別驚訝。

思考過程中需要考慮的另一件事是,值是否總是以相同的方式來自同一對象。 如果該方法可以用於其他輸入組合,則保持多參數輸入可能更好。 當然,如果確實有很多參數,則可以為參數集提供一種經過特殊設計的類型,而可以使用它。

就個人而言,盡管不使用所有屬性,我還是只希望傳遞對象,因為這會導致方法簽名更小,我覺得在代碼讀取時比許多參數更易於解析。

暫無
暫無

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

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