父/子架构问题

时间:2010-09-29 11:06:21

标签: c# architecture

我的应用程序具有以下结构:

public class Transaction
{
   public int TransactionID { get; set; }
   public TransactionTypes Type { get; set; } // Enum for the type of transaction
   public decimal Amount { get; set; }
   public virtual decimal GrandTotal { get; set; } // In this case this would simply be the Amount
}

public class MembershipTransaction : Transaction
{
   public decimal ExtraAmount { get; set; }
   public override decimal GrandTotal { get { return base.GrandTotal + ExtraAmount; } }
}

我想知道针对交易的GrandTotal是否应该自动包含ExtraAmount。这样做的好处是,如果我得到所有交易,无论交易类型如何,GrandTotal数字都是正确的。使用上述逻辑,我当前必须切换每个事务类型并返回派生类型的GrandTotal。

如果有人能为我解决这个问题,我会很感激。感谢

3 个答案:

答案 0 :(得分:2)

总计是一个总计,如果它包括ExtraAmount那么它是有意义的。这在上下文中也是有意义的,即代码可能只需要有关基类Transaction的知识才能获得正确的GrandTotal值。

作为旁注; TransactionTypes枚举有什么用途?检查事务对象本身的类型是不够的?

答案 1 :(得分:2)

我建议您将它包含在基础中,以便您可以使用接口/抽象类。

每个单独的交易类型应该知道如何计算自己的额外金额(零,金额百分比,固定括号金额),以便业务逻辑驻留在覆盖基础/抽象类的类中。

这将允许您在不知道实际交易类型是什么的情况下使用总计。

答案 2 :(得分:1)

根据我的意识,将额外金额作为继承类的一部分并覆盖Grand Total将打破Liskov的替代原则。 ExtraAmount和GrandTotal的计算应该包含在您的基类中。

希望有所帮助。