Я пытаюсь использовать 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 как частный (я всегда нужно сделать группу частью, когда им создание новых объектов)
У меня нет корня aggreagate, который может быть «форумом», о котором вы говорили. У меня есть только прецедент. Используя пример вашего форума, процесс можно описать следующим образом: пользователь выбирает некоторые сообщения, а затем, используя выбранные должности, система создает новую отдельную запись для каждого из авторов исходного сообщения, содержащего весь контент данных должностей. – Botis
Итак, вы клонируете/копируете сообщения? Это язык, используемый вашим бизнесом? 'yourAggregate.Copy()?' – JefClaes
Скорее агрегирование списка агрегатов в новый. Посмотрите на мой пример - есть такие вещи, как list.Sum (x> x.Amount) и так далее. – Botis