2016-02-11 24 views
0

比方說,我有一個類來計算稅。設計calcTax方法的最佳做法是哪種。選項1或選項2.對象屬於一個人,這就是我們存儲年齡和收入的原因。我可以看到每個選項的優缺點,但只是想看看是否有最佳做法,或者兩個選項之一是否有代碼味道。類中的方法。你應該設置屬性並讓方法使用屬性或傳遞參數嗎?

選項1:

class CalcTax 
    { 
     private int Age; 
     private double Income; 

     public void Update(int age, double inc) 
     { 
      Age = age; 
      Income = inc; 
     } 

     public double calcTax() 
     { 
      return Age * Income * 0.25; 
     } 

    } 

    CalcTax obj = new CalcTax(); 
    obj.update(5,500) 
    obj.CalcTax(); 

選項2:

class CalcTax 
    { 

     public double calcTax(int age, int inc) 
     { 
      return age * inc* 0.25; 
     } 
    } 

    CalcTax obj = new CalcTax(); 
    obj.calcTax(10,100); 
+0

這取決於。設計是你的。對象應該代表什麼?稅計算器?爲什麼第二個選項有任何字段? –

回答

0

可能會有兩種方式。取決於對象應該代表什麼。

如果一個人有一個對象(我假設年齡和收入與一個人有關),並且該對象將會執行超出所顯示的一個計算的各種事情,那麼基本屬性(年齡,收入等)應該是班級屬性。這些可能會被設置爲new()的參數,或者可能在創建實例後不久設置。

但是,如果這只是一個計算器對象,用於處理各種人的請求,那麼就沒有必要將Age和Income作爲類屬性。你可以完全刪除它們你的選項2的例子,只需要它們在calcTax()的參數中。

它可能在那裏結束,其中一個選項與您的項目最匹配。但是如果你正在創建更多的庫函數,其他程序員將以不同的方式在不同的項目中使用,你可以跨越柵欄一點...

將年齡和收入作爲參數添加到new()並保存他們作爲類的屬性。然後,將參數設置爲calcTax()可選,如果沒有提供,則默認爲類屬性。這樣,您的開發人員可以採取最適合他們需求的方法,並且您有一個代碼庫來支持他們。

0

正如第一條評論所說,選擇是你的。試着去思考你的班級將扮演什麼角色。它只是您可能想要調用的常用數學函數的集合。如果是這樣,那麼具有可通過參數的方法非常好。

但是,如果您要生成特定於某個上下文的稅收類別,那麼可能像下面這樣對您最適合。下面的例子需要年齡和收入,並提供CalculatedTax作爲只讀屬性。

public class Tax 
    { 
     public Tax(int Age, int Income) //constructor, class can not be instantiated without these values 
     { 
      this.Age = Age; 
      this.Income = Income; 
     } 

     public int Age { get; set; } 
     public int Income { get; set; } 
     public double CalculatedTax //read only property 
     { 
      get { return double.Parse((Age * Income).ToString()) * 0.25f; } 
     } 
    } 

Tax tax = new Tax(5, 1000); 
double calculatedTax = tax.CalculatedTax; //1250 

上述示例的一個好處是需要年齡和收入來生成CalculatedTax值。通過強制將這些參數輸入到構造函數中,確保它們存在,否則(對於本例),如果這些只是您的三個屬性,那麼如果您不打算包含所需的參數。

相關問題