Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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#_Oop_Domain Driven Design_Factory - Fatal编程技术网

C# 工厂是否应该返回元素列表?

C# 工厂是否应该返回元素列表?,c#,oop,domain-driven-design,factory,C#,Oop,Domain Driven Design,Factory,我正在尝试使用DDD,我需要创建某种实体。此方法的接口与此类似: public IEnumerable<Entity> CreateEntities(IEnumerable<Entity> entities, decimal someOtherParameter); 以前,我将此方法作为实体类上的静态方法。(返回的单个实体是私有的)我正在考虑将这种逻辑转移到工厂。实现这一目标的最佳方式是什么?我的想法是: 使用CreateSingleEntity方法创建工厂,另一个

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

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
          };
      }