2015-03-02 49 views
0

我正在研究以下課程。作爲一個例子,我縮短了屬性列表。如何保持私有屬性的可擴展性?

public class Paycheck 
{ 
    public decimal Gross { get; private set; } 
    public decimal FederalWithholdingTax { get; private set; } 
    public decimal StateWithholdingTax { get; private set; } 
    // ... 
} 

現在我的想法是創建一個接口來計算所有稅款...

public interface IPaycheckDeductionCalculator 
{ 
    void Calculate(); 
} 

的想法後,也就是可以執行計算/扣除的片酬類之外創建方法。隨着法律和薪資流程的運作方式,扣除額如何執行以及扣除額會不斷變化,因此我希望保持可擴展性。

我的兩難處境是我想讓Paycheck屬性設置器保持私密,以便任何人都可以更改這些值。處理薪水後保持數據不變是至關重要的。

我考慮過代表的使用,但我不確定這是我的答案,因爲我仍然無法在Paycheck類之外開發所需的方法。

有沒有我沒有想到的東西,或者這是一個「你不能有你的蛋糕,吃太多」的情況?

+0

您可以創建一個實現該接口的類,然後在'Calculate'方法內實例化一個'Paycheck'類,從而通過'Paycheck'構造函數初始化這些值? – CyberDude 2015-03-02 15:49:45

+0

我考慮過這個,但是我必須爲每個屬性初始化一個新類,然後我必須有一些方法將所有這些類減少爲一個。計算方法僅負責計算Paycheck類的一個屬性。 – Safari137 2015-03-03 18:18:29

回答

1

讓計算這些值的接口返回它們正在計算的值。將這些接口的實例傳遞給Paycheck,它們可以執行計算(不需要了解接口實現的任何內容),然後設置相應屬性的值。

+0

這是有道理的。但是,如何在Paycheck課程中實現?我可以將接口注入到類中以執行計算並返回值,但Paycheck類必須知道接口要修改的屬性。 – Safari137 2015-03-03 18:20:33

+0

@ Safari137給接口提供幾種方法,一種計算每個屬性。或者讓它接受每個屬性的接口,如你所說。 – Servy 2015-03-03 18:26:34