我的应用程序具有以下结构:
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。
如果有人能为我解决这个问题,我会很感激。感谢
答案 0 :(得分:2)
总计是一个总计,如果它包括ExtraAmount
那么它是有意义的。这在上下文中也是有意义的,即代码可能只需要有关基类Transaction
的知识才能获得正确的GrandTotal
值。
作为旁注; TransactionTypes
枚举有什么用途?检查事务对象本身的类型是不够的?
答案 1 :(得分:2)
我建议您将它包含在基础中,以便您可以使用接口/抽象类。
每个单独的交易类型应该知道如何计算自己的额外金额(零,金额百分比,固定括号金额),以便业务逻辑驻留在覆盖基础/抽象类的类中。
这将允许您在不知道实际交易类型是什么的情况下使用总计。
答案 2 :(得分:1)
根据我的意识,将额外金额作为继承类的一部分并覆盖Grand Total将打破Liskov的替代原则。 ExtraAmount和GrandTotal的计算应该包含在您的基类中。
希望有所帮助。