2013-07-14 37 views
1

我正在嘗試使用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爲私有(我總是需要的一部分,當IM創造新的實體做組)

回答

1

一個工廠並不一定是一個新的類。通常,另一個聚合負責創建新實體或聚合。你的語言說什麼?例如var post = forum.NewPost(user)

+0

我沒有aggreagate根,可能是「論壇」你提到。我只有用例。使用你的論壇的例子,這個過程可以描述如下:用戶選擇一些帖子,然後,使用選擇的帖子,系統爲原始帖子的每個作者創建一個新的單一帖子,其中包含所有的內容的職位。 – Botis

+0

所以你克隆/複製帖子?這是你的企業使用的語言嗎? 'yourAggregate.Copy()?' – JefClaes

+0

相當於將聚合列表聚合爲一個新聚合。看看我的例子 - 有像list.Sum(x> x.Amount)等等。 – Botis