2017-10-04 67 views
0

我正在建立一個財務應用程序,我有兩種方法來計算信用餘額 所以我嘗試遵循基於域驅動設計的設計,我感到一些困惑的方面如何構成我必須注入餘額計算器在信貸實體中。 我嘗試插入信貸叫IBalanceCalculator一個接口,然後當我在信貸調用方法CalculateBalanceAtDate這確定是什麼情況下使用我應該如何處理服務域的注入?

這就是例子

credit { 
    protected IBalanceCalcultar _calculator; 
    .... 
    private void _InitializeBalanceCalculator() 
    { 
     if (_balanceCalculator == null) 
      switch (InterestType) 
      { 
       case EInterestType.OutstandingBalance: 
        _balanceCalculator = new OutstandingBalanceService(); 
        break; 
       case EInterestType.GlobalBalance: 
        _balanceCalculator = new GlobalBalance(); 
        break; 
       default: 
        throw new Exception(); 
      } 
    } 
    public void CalculateBalanceAtDate(DateTime date, bool moratory) 
    { 
     _InitializeBalanceCalculator(); 
     _balanceCalculator.GetBalance(this, date); 
    } 
} 

但我覺得這樣不太好

有人能澄清我是正確的,或者如果存在更好的方法

回答

2

有人能澄清我是正確的,或者如果存在更好的方法

聽起來像你的域有一個像InterestPolicy這樣的概念,它決定了應該用什麼策略來計算餘額。找出那個東西的名稱是您的域名(您的領域的專家就知道了),並在把它作爲一個參數

public Balance CalculateBalanceAtDate(
    InterestPolicy interestPolicy, 
    DateTime date, 
    bool moratory) 
{ 
    IBalanceCalculator calculator interestPolicy.balanceCalculator(this.interestType) 
    return calculator.balance(this, date) 
} 

稍微好一點的是採取實體本身的方程,只是通過狀態

public Balance CalculateBalanceAtDate(
    InterestPolicy interestPolicy, 
    DateTime date, 
    bool moratory) 
{ 
    IBalanceCalculator calculator interestPolicy.balanceCalculator(this.interestType) 
    return calculator.balance(this.creditHistory, date) 
} 
+0

在你的回答中得到啓發我在考慮消除類信用的InterestType屬性並試圖將一個名爲InterestPolicy的對象放在裏面包含interestType 對於我有意義設置InterestPolicy當我創建信用時,因爲方式將計算的利息不應該改變信用的生活 –

+0

那麼'this.interestType.calculateBalanceAtDate(this.creditHistory,date)'? 'InterestType'可能只是一個用適當的計算器配置的枚舉。 – plalx

+0

是興趣類型是一個枚舉,並確定如何計算利息 我認爲更好,而不是信用的屬性現在我相信InterestType應該屬於InterestPolicy,因爲它的實體決定了如何計算利息。 –

0

爲什麼你需要注入的服務?

只需將它作爲您的方法的參數傳遞即可。

然後,您將整個應用程序連接到應用程序服務中!

作爲參數的域服務非常好,它也使得您的域對象也可以測試。

+0

我認爲我應該注入平衡計算器的服務,因爲它在多個地方使用,例如,當我計算報告的餘額或應用支付時,以避免重複任務在每個方法中傳遞服務用於我更喜歡​​注射服務。 –

相關問題