Здравствуйте!
Продолжаю разбираться с DDD.
Возник такой вопрос по коллекциям.
Агрегат Tovar имеет свойства-коллекции AnalogList, PackList.
Проблема в следующем: клиенты объекта Tovar при работе с этими коллекциями не должны иметь возможности их изменять.
То есть, предоставляемые агрегатом коллекции извне должны быть доступны только на чтение. Значит, следующий код не должен компилироваться:
lTovar = lRepository.GetTovar(lTovarID);
lNewAnalog = new TovarAnalog(...);
lTovar.AnalogList.Add(lNewAnalog); // здесь должна быть ошибка: метод Add не существует
Однако, при формировании агрегата в эти коллекции нужно же как-то добавлять элементы.
То есть эти же самые коллекции, чтобы их можно было заполнить, должны иметь метод Add. Но этот метод дожен быть доступен только при формированиии коллекции.
Получается, мы имеем противоречие.
Как это правильно реализовать в программном коде?
Похоже, что нужно использовать два разных класса коллекций.
Один класс должен быть "полноценным" (то есть иметь возможность добавления\удаления элементов), а второй класс коллекции — только на чтение и поиск элементов.
И оба эти класса должны "разделять" общий набор элементов.
Верно, я понимаю?