Событие домена Как получить дополнительные данные?

Я создаю систему электронной торговли с помощью DDD. В этой системе у меня есть два ограниченных контекста: Identity & Access и Sales.

Клиенты могут зарегистрироваться, заполнив форму, указав свое имя, адрес электронной почты и пароль. Затем в контексте Sales я регистрирую клиента:

$customer = new Customer($request->name, $request->email);
$this->customers->add($customer);

Агрегат Customer вызывает событие CustomerWasRegistered.

Контекст Identity & Access реагирует на это событие и создает SystemUser агрегат для этого клиента:

$user = new SystemUser($email, $password);
$this->users->add($user);

Мой вопрос: потому что агрегат Customer не знает о пароле (и ни о событии CustomerWasRegistered). Как мне получить этот пароль из запроса в Identity & Access контекст?


person Jan-Paul Kleemans    schedule 26.02.2016    source источник


Ответы (1)


Я вижу здесь два решения:

  1. Если вы действительно хотите иметь политику домена в I&A, которая будет создавать пользователя после получения события «CustomerWasCreated», возможно, вы не захотите запрашивать пароль у новых клиентов, вместо этого вы отправите ссылку для активации их учетной записи и ввода нового пароля после пользователь (неактивный) создан. Эта стратегия используется очень часто, но они не смогут войти в систему до завершения процесса.
  2. Что бы я сделал - делегировал эту работу менеджеру процессов, который будет координировать работу между двумя BC. ПК узнает пароль и отправит соответствующие команды, содержащие необходимые данные.

В обоих случаях вы избегаете отправки пароля в БК продаж.

person Alexey Zimarev    schedule 26.02.2016