2015-03-02 84 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