我正在构建一个财务应用程序,我有两种方法来计算信用余额 所以我尝试遵循基于领域驱动设计的设计,我觉得有些困惑的方面,我必须在信用实体中注入平衡计算器。 我尝试在信用卡中插入一个名为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);
}
}
但我觉得这种方式不太好
某人可以澄清我是正确的还是存在更好的方式
答案 0 :(得分: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)
}
答案 1 :(得分:0)
为什么需要注入服务?
只需将其作为方法的参数传递。
然后,您可以在应用程序级别的应用程序服务中连接整个文件!
域服务作为参数非常精细,它使您的域对象也可以测试。