工厂应该返回元素列表吗?

时间:2013-07-14 09:30:25

标签: c# oop domain-driven-design factory

我正在尝试使用DDD,我需要创建某种实体。此方法的界面与此类似:

public IEnumerable<Entity> CreateEntities(IEnumerable<Entity> entities, decimal someOtherParameter);

需要注意的是,在此方法中,entities上有一个分组。

我现在所拥有的一个简化(很多)例子:

public IEnumerable<Entity> CreateEntities(IEnumerable<Entity> entities, decimal someOtherParameter)
{
    var grouped = entities.GroupBy(x=>x.SomeProperty);
    var result = new List<Entity>();
    foreach(var item in grouped)
    {
        result.Add(CreateEntity(item, someOtherParameter));
    }
    return result;
}

public Entity CreateSingleEntity(IEnumerable<Entity> entities, decimal something)
{
    return new Entity(){
        something = something,
        something2 = entities.Sum(x=>x.Amount),
        something3 = entities.First().something3
    };
}

以前我将此方法作为Entity类的静态方法。 (返回的单个实体是私有的)我正在考虑将这个逻辑移到工厂。实现这一目标的最佳方法是什么?我的想法:

  • 使用CreateSingleEntity方法生成工厂,另一个使用 将在域名服务。
  • 将两个方法移动到工厂,并将CreateSingleEntity保持为私有(当我创建新实体时,我总是需要按部分进行分组)

1 个答案:

答案 0 :(得分:1)

工厂不一定是新班级。通常,另一个聚合负责创建新实体或聚合。你的语言怎么说?例如var post = forum.NewPost(user)