2

在我的域模型中,我有一个名为“Inventory”的实体。要在库存中进行特定移动,我需要访问业务级别配置以进行检查。

我在库存实体中有以下方法

public class Inventory
{
  // Some codes, properties and arguments are omitted for brevity.
  public int InventoryId { get; set; }
  public virtual Product Product { get; set; }
  public virtual IList<InventoryTransaction> Transactions { get; set; }
  public virtual IList<Stock> Stocks {get; set; }
  // ........

  public void purchase(double qty, decimal cost) { //....... }
  public double QuantitiesOnHand() { //..... }
  public decimal CostOfItemsOnHand() { //....... }

  // This method require to access certain configuration in order to 
  // process the sale of item.
  public decimal Sell(double qty, decimal cost) { //..... }
}

要处理销售,我需要访问某些配置。注入配置接口以在该实体内处理销售是否是一种好习惯。会不会破坏DDD的纯度?或者我应该只将这个“Sell()”方法移动到域服务层吗?

编辑 :

public virtual IList<Stock> Stocks {get; set; }已添加到上述类定义中,该类定义包含特定库存项目的库存。

4

1 回答 1

3

销售/购买操作看起来不属于该实体。我的意思是,这些操作可能(并且可能是)比仅仅减少/增加数量要多得多。此外,他们的职责可能跨越多个实体。

这些方法非常适合某种领域服务。例如:

public class InventoryTradeService
{
  public void purchase(Inventory inventory, double quantity)
  public void sell(Inventory inventory, double quantity)
}

关于您的“ConfigurationService”,如果它是您所说的“业务级配置”,它应该是域模型的一部分。因此,没有理由注入它 - 只需访问它。如果它不是模型的一部分,请考虑合并它。

于 2013-07-25T12:40:47.070 回答