2013-07-14 4 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 класса. (Тот, кто возвращал единственную Entity, был закрыт) Im думает о том, чтобы переместить эту логику на фабрику. Каков наилучший способ сделать это? Мои идеи:

  • Есть завод с методом CreateSingleEntity, а другой один бы в службе домена.
  • Переместить оба метода на завод, и держать CreateSingleEntity как частный (я всегда нужно сделать группу частью, когда им создание новых объектов)

ответ

1

Завод не обязательно должен быть новым классом , Часто другой агрегат отвечает за создание новых объектов или агрегатов. Что говорит ваш язык? Например, var post = forum.NewPost(user).

+0

У меня нет корня aggreagate, который может быть «форумом», о котором вы говорили. У меня есть только прецедент. Используя пример вашего форума, процесс можно описать следующим образом: пользователь выбирает некоторые сообщения, а затем, используя выбранные должности, система создает новую отдельную запись для каждого из авторов исходного сообщения, содержащего весь контент данных должностей. – Botis

+0

Итак, вы клонируете/копируете сообщения? Это язык, используемый вашим бизнесом? 'yourAggregate.Copy()?' – JefClaes

+0

Скорее агрегирование списка агрегатов в новый. Посмотрите на мой пример - есть такие вещи, как list.Sum (x> x.Amount) и так далее. – Botis