C# 工厂是否应该返回元素列表?
我正在尝试使用DDD,我需要创建某种实体。此方法的接口与此类似:C# 工厂是否应该返回元素列表?,c#,oop,domain-driven-design,factory,C#,Oop,Domain Driven Design,Factory,我正在尝试使用DDD,我需要创建某种实体。此方法的接口与此类似: public IEnumerable<Entity> CreateEntities(IEnumerable<Entity> entities, decimal someOtherParameter); 以前,我将此方法作为实体类上的静态方法。(返回的单个实体是私有的)我正在考虑将这种逻辑转移到工厂。实现这一目标的最佳方式是什么?我的想法是: 使用CreateSingleEntity方法创建工厂,另一个
public IEnumerable<Entity> CreateEntities(IEnumerable<Entity> entities, decimal someOtherParameter);
以前,我将此方法作为实体
类上的静态方法。(返回的单个实体是私有的)我正在考虑将这种逻辑转移到工厂。实现这一目标的最佳方式是什么?我的想法是:
- 使用CreateSingleEntity方法创建工厂,另一个 将位于域服务中李>
- 将这两个方法都移动到factory,并将CreateSingleEntity保持为私有(当我创建新实体时,我总是需要按部分进行分组)
- 工厂不一定是新的类别。通常,另一个聚合负责创建新的实体或聚合。你的语言怎么说?例如
var post=forum.NewPost(用户)
工厂不一定是一个新类。通常,另一个聚合负责创建新的实体或聚合。你的语言怎么说?例如var post=forum.NewPost(用户)
我没有你提到的“论坛”的aggreagate根。我只有用例。以你的论坛为例,这个过程可以描述如下:用户选择一些帖子,然后使用所选的帖子,系统为原始帖子的每个作者创建一个新的、单一的帖子,其中包含给定帖子的所有内容。那么你是在克隆/复制帖子?这是你们公司使用的语言吗yourAggregate.Copy()?
而是将聚合列表聚合到新列表中。看看我的例子——有一些东西像list.Sum(x>x.Amount)等等,那么它可能更适合单独的类。不过我会把这两种方法放在一起。我没有你提到的“论坛”的aggreagate根。我只有用例。以你的论坛为例,这个过程可以描述如下:用户选择一些帖子,然后使用所选的帖子,系统为原始帖子的每个作者创建一个新的、单一的帖子,其中包含给定帖子的所有内容。那么你是在克隆/复制帖子?这是你们公司使用的语言吗yourAggregate.Copy()?
而是将聚合列表聚合到新列表中。看看我的例子——有一些东西像list.Sum(x>x.Amount)等等,那么它可能更适合单独的类。不过我会把这两种方法放在一起。
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
};
}