【发布时间】:2017-06-20 08:23:58
【问题描述】:
请看代码:
public System.Collections.Generic.IEnumerable<IDenomination> GetDenominations(decimal Cost, decimal PaymentReceived)
{
decimal ChangeRequired = PaymentReceived - Cost;
foreach (decimal CurrencyAmount in Currency.CurrencyDenominations())
{
if (ChangeRequired / CurrencyAmount >= 1)
{
int Quantity = (int)Math.Floor(ChangeRequired / CurrencyAmount);
IDenomination ChangeDenomination = ChangeDenominationsFactory.Create(CurrencyAmount, Quantity);
yield return ChangeDenomination;
ChangeRequired = ChangeRequired - (ChangeDenomination.Amount * ChangeDenomination.Quantity);
}
}
}
此方法是域对象的一部分。我担心的是域对象负责通过工厂创建对象。从 DDD 的角度来看,这是否可以接受?
昨天我正在阅读一个问题,SLaks (https://stackoverflow.com/users/34397/slaks) 回答(或评论)与此类似。他建议使用工厂或 Func 代表。我没有保存指向我收藏夹的链接。我花了将近 1.5 个小时来寻找这个问题,但是我找不到它。如果其他人可以找到它,请发布链接。我在徘徊 Func 委托是否会更好(这样包含上面迭代器的类就不必知道工厂。
【问题讨论】:
-
听起来你真正的问题是关于耦合,而不是对象创建。如果是这种情况,您应该提出一个新问题。
标签: c# unit-testing domain-driven-design