Как сделать метод агрегированного корня доступным только для события домена и ничего больше.

У меня два совокупных корня ... AR1 и AR2. AR1 содержит набор ссылок (идентификаторов) на экземпляры AR2. Внутри одного из методов AR1 возникает событие домена для обновления коллекции экземпляров AR2. Событие домена возникает после завершения транзакции с использованием упомянутой здесь техники: http://www.jayway.com/2013/06/20/dont-publish-domain-events-return-them все работает как положено.

Моя проблема заключается в следующем: метод, который я вызываю из события домена для обновления AR2, в настоящее время является общедоступным (не может быть внутренним), поскольку событие домена выполняется на моем уровне службы приложения (сборка отличается от моего уровня бизнес-логики). Я хочу, чтобы этот метод выполнялся только событием домена и ничего больше.

Как бы я это сделал?


person Cool Breeze    schedule 26.11.2014    source источник
comment
Что вас больше всего беспокоит, что указывает вам в этом направлении?   -  person JefClaes    schedule 26.11.2014
comment
мое первоначальное мышление заключалось в том, что я когда-либо хотел, чтобы команда выполнялась только после того, как событие произошло ... но, очевидно, что-то должно быть в корне не так с моим дизайном?   -  person Cool Breeze    schedule 27.11.2014


Ответы (1)


Вы можете запросить объект события в качестве аргумента метода AR2. Это будет хорошим индикатором того, что метод следует вызывать только в результате сгенерированного события.

public void someMethod(SomeOccuredEvent event)

Мы видим, что этот подход используется в Эффективный агрегатный дизайн, часть III в разделе "Обеспечение конечной согласованности".

person plalx    schedule 27.11.2014
comment
Мне нравится эта идея :) - Спасибо. - person Cool Breeze; 28.11.2014