Как правильно менять состояние агрегата из другого домена/модуля?

Ссылка скопирована
PHP
1 ответ

Вопрос не правильно сформулирован и не актуален

Дополнительно:

" Поэтому, можете подсказать, в данной ситуации это должно выглядить как событие которое инициализирует изменение или событие которое происходит после изменения?"
Как событие которое происходит после изменения.
т.е. вы меняете свой агрегат, и потом в диспетчер кидаете событие о том что в агрегате произошло. со всеми данными.
"ибо я понимаю что один модуль не должен знать о другом"
с точки зрения ддд и именно событий - может. но модули не то чтобы знают друг о друге. они просто реагируют на события и данные в них, которые приходят из неизвестной части системы.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Никита Орлов Ответ

Для изменения состояния агрегата из другого домена или модуля вам следует использовать паттерн проектирования "Наблюдатель" (Observer). Этот паттерн позволяет объектам оповещать другие объекты о своем изменении состояния, не зная при этом ничего о них.

Для использования паттерна "Наблюдатель" вам необходимо создать интерфейс Subject (Субъект) и интерфейс Observer (Наблюдатель). Класс агрегата будет реализовывать интерфейс Subject, а классы, которые хотят получать уведомления об изменениях состояния агрегата, будут реализовывать интерфейс Observer.

Пример реализации паттерна "Наблюдатель" на PHP:

interface Subject {
public function attach(Observer $observer);
public function detach(Observer $observer);
public function notify();
}

interface Observer {
public function update();
}

class Aggregate implements Subject {
private $observers = [];

public function attach(Observer $observer) {
$this->observers[] = $observer;
}

public function detach(Observer $observer) {
$key = array_search($observer, $this->observers);
if ($key !== false) {
unset($this->observers[$key]);
}
}

public function notify() {
foreach ($this->observers as $observer) {
$observer->update();
}
}

// Метод, который меняет состояние агрегата и оповещает наблюдателей
public function changeState() {
// Изменение состояния агрегата

// Оповещение наблюдателей
$this->notify();
}
}

class ObserverA implements Observer {
public function update() {
echo "Observer A has been notified

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно