Страница 1 из 1

DDD, remove, aggregate event

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

Re: DDD, remove, aggregate event

Добавлено: 2018.02.12, 17:10
ElisDN
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);

Re: DDD, remove, aggregate event

Добавлено: 2018.02.12, 17:21
Bio man
Ну да, логично. Спасибо.