DDD, remove, aggregate event

Обсуждаем, как правильно строить приложения
Ответить
Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

DDD, remove, aggregate event

Сообщение Bio man » 2018.02.12, 17:00

Почему нельзя создать событие удаления прямо в репозитории?
Зачем добавлять агрегату лишний метод remove и вызывать его перед вызовом repository::remove?

Аватара пользователя
ElisDN
Сообщения: 4998
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: DDD, remove, aggregate event

Сообщение ElisDN » 2018.02.12, 17:10

Bio man писал(а):
2018.02.12, 17:00
Почему нельзя создать событие удаления прямо в репозитории?
Можно.
Bio man писал(а):
2018.02.12, 17:00
Зачем добавлять агрегату лишний метод remove и вызывать его перед вызовом repository::remove?
Чтобы в него при необходимости можно было поместить логику:

Код: Выделить всё

public function remove()
{
    if ($this->isActive()) {
        throw new \DomainException('Нельзя удалить активный заказ.');
    }
    $this->recordEvent(new OrderRemoved($this));
}
и вызывать в сервисе:

Код: Выделить всё

$order = $this->orders->get($command->id);
$order->remove();
$this->orders->remove($order);
Последний раз редактировалось ElisDN 2018.02.12, 17:23, всего редактировалось 1 раз.

Bio man
Сообщения: 609
Зарегистрирован: 2013.07.22, 10:40

Re: DDD, remove, aggregate event

Сообщение Bio man » 2018.02.12, 17:21

Ну да, логично. Спасибо.

Ответить