Re[5]: DDD: разные коллекции внутри и снаружи агрегата
От: RushDevion Россия  
Дата: 17.06.24 08:40
Оценка:
Z>А как это правильно сделать?

public sealed class Tovar {
  // Дефолтный конструктор
  public Tovar(... /* тут какие-то обязательные свойства, без которых сущность "товар" не имеет смысла */ ) {}
  
  // Конструктор, который используется только при поднятии из БД.
  // Обычным потребителям класса он недоступен (internal), им будет пользоваться только код репозиториев.
  internal Tovar(..., IEnumerable<Analog> analogs) {
    _analogs = new List<Analog>(analogs);
  }

  // Внутри работаем с обычным список, наружу выставляем как только для чтения 
  private List<Analog> _analogs = new();
  public IReadOnlyCollection<Analog> Analogs { get; } => _analogs;

  // Контролируемое добавление аналогов (если нужно)
  public void AddAnalog(Analog analog) {
    // TODO: здесь бизнес-логика по добавлению аналога (e.g. проверка дубликатов и т.п.)
    _analogs.Add(analog);
  }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.