Один аспект AggregateRoots с детьми не на 100% ясен для меня. И я также не нашел полного примера через Google.AggregateRoot и дети
Предположим, у меня есть «Агрегат» «Клиент». Клиент может иметь многопроектные проекты.
Я уже узнал, что у меня есть только один «покупатель» AggregateRoot, а проект - не корень, настолько хороший.
public class Customer : AggregateRoot
{
private List<Project> _projects { get;set; }
public void AddProject(Guid id, string name, int budget)
{
?
}
}
У меня есть несколько небольших вопросов.
- Является ли проект агрегатом (просто без корня) или просто классом POCO?
- Важное значение для применения состояния и то, что для сохранения в хранилище событий
- Я имею бизнес-правило, проецирует на каждый клиент иметь уникальное имя.
- Где это бизнес-правило, внутри Клиента или внутри Проекта?
- ли моя команда имеет название «AddProject» и существует в пространстве имен клиента или «CreateProject» и существует в пространстве имен проекта, который затем загружает агрегат клиента в фоновом режиме и выполняет «AddProject» на агрегате клиента?
Сердечные приветы
Спасибо за ваш ответ. Я думаю, вы имеете в виду ваше третье предложение «на уровне клиента», правильно? И я добавляю третий вопрос на мой пост, может быть, вы тоже можете поделиться своим мнением с этим? – SharpNoiZy
Да, извините, я имел в виду уровень клиента. Что касается команд, это зависит от семантики, уровень которой должен присутствовать в этой команде, но определенно не на уровне Проекта, так как снова обе команды допускают модификацию некоторого состояния, которое ссылается на Project, но в то же время Project не должен знать о структуре штата или даже его существование. –