Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 域对象可以创建对象吗?_C#_Unit Testing_Domain Driven Design - Fatal编程技术网

C# 域对象可以创建对象吗?

C# 域对象可以创建对象吗?,c#,unit-testing,domain-driven-design,C#,Unit Testing,Domain Driven Design,请参阅代码: public System.Collections.Generic.IEnumerable<IDenomination> GetDenominations(decimal Cost, decimal PaymentReceived) { decimal ChangeRequired = PaymentReceived - Cost; foreach (decimal CurrencyAmount in Currency.CurrencyDenominat

请参阅代码:

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);
        }
    }
}
public System.Collections.Generic.IEnumerable GetNames(十进制成本,十进制付款已收到)
{
decimal ChangeRequired=已收到的付款-成本;
foreach(十进制货币金额,单位为Currency.currencyPaminations())
{
如果(需要更改/货币金额>=1)
{
整数数量=(整数)数学下限(所需变更/当前金额);
IDEnamification ChangeDenomination=ChangeDenominationsFactory.Create(CurrencyAmount,Quantity);
收益率;收益率;面额;
ChangeRequired=ChangeRequired-(ChangeDemination.Amount*ChangeDemination.Quantity);
}
}
}
此方法是域对象的一部分。我担心的是域对象负责通过工厂创建对象。从DDD的角度来看,这是否可以接受


昨天我读到了一个SLaks()回答(或评论)类似于此的问题。他建议使用工厂或Func委托。我没有保存到我最喜欢的链接。我花了将近1.5个小时寻找这个问题,但是我找不到它。如果其他人能找到它,请张贴链接。我想知道Func委托是否更好(这样包含上述迭代器的类就不必知道工厂的情况)。

在DDD中,我希望在服务中而不是域对象中使用此代码


这段代码看起来并不取决于域对象的任何状态,因此将其移动到域服务应该很简单。

在DDD中,我希望这段代码出现在服务中,而不是域对象中

看起来这段代码并不依赖于域对象的任何状态,所以将其移动到域服务应该很简单

域对象可以创建对象吗

是的,这通常是新表示法的来源

请参阅,例如,。或事件源系统中的无数示例中的任何一个,其中域对象创建描述它们如何随时间演化的事件

Greg Young经常使用交易簿作为事件来源域的示例。订单来自外部世界,但域模型负责决定哪些订单配对以进行交易。因此,表示该交易的价值对象在域模型中创建

该对象是通过直接调用其构造函数创建的,还是通过在模型中的其他对象上调用方法创建的,或者是通过在工厂中调用方法创建的,或者是通过在域服务上调用方法创建的,这在很大程度上取决于用户的喜好

域对象可以创建对象吗

是的,这通常是新表示法的来源

请参阅,例如,。或事件源系统中的无数示例中的任何一个,其中域对象创建描述它们如何随时间演化的事件

Greg Young经常使用交易簿作为事件来源域的示例。订单来自外部世界,但域模型负责决定哪些订单配对以进行交易。因此,表示该交易的价值对象在域模型中创建


该对象是通过直接调用其构造函数创建的,还是通过在模型中的其他对象上调用方法创建的,或是在工厂中调用方法,或是在域服务上调用方法创建的,这在很大程度上取决于用户的喜好。

这会使域模型变得贫乏,不是吗?贫血症是指一个实体不允许位于inva中lid状态,而不是关于包含/由所有域组成code@ConstantinGALBENU我不记得state与贫血域模型有任何关系。@w0051977可能是这样。我不知道你域的其他部分是什么样子。但是,只是把不应该属于你域的东西放在你的域中,这样它就不会贫血,这也是一种反拍tern@w0051977此外,由于此函数对域对象的状态不做任何处理,因此它与域对象无关。这会使域模型变得贫乏,不是吗?贫乏是指一个实体不允许处于无效状态,而不是包含/由所有域组成code@ConstantinGALBENU我不记得有过这样的经历与贫血域模型有关。@w0051977可能是。我不知道你域的其他部分是什么样子。但是,仅仅将不应该属于你域的内容放在你的域中,这样它就不会贫血,这也是一种反贫血的方法-pattern@w0051977此外,由于此函数不处理域对象的状态,因此它与呃。听起来你真正的问题是关于耦合,而不是对象创建。如果是这样,你应该提出一个新问题。听起来你真正的问题是关于耦合,而不是对象创建。如果是这样,你应该提出一个新问题。