2010-09-29 35 views
0

我的應用程序的結構如下:父/子架構文檔

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。

如果有人能爲我解決這個問題,我將不勝感激。謝謝

回答

2

A總計是一個總計,因此它將是有意義的,如果它包括ExtraAmount。這在代碼可能僅需要關於基類Transaction以獲得正確的GrandTotal值的知識的情況下也是有意義的。

作爲一個側面說明; enum有什麼用途?檢查交易對象本身的類型是不夠的嗎?

+0

這就是我所期望的,但我有更多的信心,我正在做正確的事情。該模型實際上是從我的數據庫抽象,所以這就是爲什麼我需要枚舉。 – nfplee 2010-09-29 13:12:48

2

我會建議你將它包含在底座中,以便可以使用接口/抽象類。

每個單獨的交易類型都應該知道如何計算自己的額外金額(爲零,金額的百分比,固定的括號內的金額),以便業務邏輯駐留在類中,覆蓋基類/抽象類。

這將允許您在不知道實際交易類型是什麼的情況下使用總計。

1

將額外金額作爲繼承類的一部分,並且總共將打破Liskov的替代原則,據我所知。 ExtraAmount和GrandTotal的計算應該包含在您的基類中。

希望有所幫助。