[英]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.