我有一個處理'債券'的財務應用程序。我需要實例化對象 - 多態性
- 模型的應用程序,以避免貧血模型(我理解是壞的)。
- 根據鍵的類型實例化不同的實現。
系統從外部系統獲取指令,並將指令應用於指定的債券。因此我有一個指令實體
Instruction[Id,BondReference,Action,Value]
例如,到投票「是」的指令在債券
Instruction
{
BondReference: Bond1,
Action: Vote
Value: VoteYes
ResolutionReference: Resolution1
}
和債券實體傳遞
Bond
{
Id: 1,
Reference: Bond1
Resolutions: [
{Resolution1: We have resolved to increase our stake in Google},
{Resolution2: We have resolved to fire the CEO}
...
]
Instructions: [Inst1,Inst2,Inst3...]
}
但是一個分辨率的,指令通常不會多隻一件事(它實際上是在一個有效的許多指令),例如取消先前指令的指令,這意味着首先取消先前的交易,然後需要重新計算某些值。而且,單個指令可能會超載,可能會取消先前的指令並投票決定。
我被建議使用域服務來處理新的指令。
BondService
{
public void Apply(Instruction newInstruction)
{
var bond = _bondRepository.GetByReference(newInstruction);
bond
.RecalculateNominalValue(newInstruction)
.CalculateInterest(newInstruction)
.CancelInstruction(newInstruction)
.Approve(newInstruction);
}
}
我看到這個結構的問題是,對於每條指令,即使方法不相關,也會調用所有方法。我可以使用一些if語句,但代碼看起來不整潔。
現在的問題是,
- 這是模擬的最佳方式?
- 而對於計算,根據債券類型的不同計算。所以我想實現多態。我被告知我需要使用工廠來實例化正確的實現。這是最好的方法嗎?
對於BondType 1,3,5我使用calculationA,對於bondType 2,7 ...我需要使用計算B.我如何實現不同的計算類型?注意,我對多態性非常熟悉,但是,我一直無法找到如何實例化正確實現的可靠示例。 日Thnx遠遠閱讀本...
thanx的響應,有一件事我沒有提到的是,這是一個棕地項目,我們正在慢慢地將其轉換爲新的應用程序,並在此期間,我們將使用現有的前端,因此我們不能改變數據庫結構等,所以我會記住事件採購的建議(但可能(很可能)現在不實施),因爲我必須做一些關於這個話題的閱讀等。我最喜歡的是1 instr =多個事件(我很可能是從1條指令創建多個命令)。我會盡快答覆你的建議 – sawe
我需要工廠的原因是因爲大約3個bondType使用一個計算,而一個bondType使用另一個計算。所以從長遠來看,可以添加bondTypes來完全使用不同的計算,所以* 1 bondType!= 1計算*。所以使用bondType進行計算意味着我在不同的地方複製了計算。說得通?或者我可以進一步解釋 – sawe