Как использовать библиотеку JS Оливер EventStore? - PullRequest
2 голосов
/ 22 марта 2011

Я искал Event Sourcing для нового проекта с JS Oliver's EventStore и mongo в качестве слоя персистентности, но натолкнулся на несколько вопросов:

  1. До попытки поиска событиймой домен сохранился до БД, и я использовал доменные события Udi pattern , которые очень хорошо работали для меня, когда NHibernate управлял единицей работы.Однако я получил одну единицу работы, которая может влиять на несколько агрегатов, например.

    Я "извлекаю" свой агрегат корзины покупок, который вызывает событие, на которое обработчик отвечает, создавая агрегат счета-фактуры, который, в свою очередь, вызывает событие (это только пример)

    В этом случаеУ меня есть одна единица работы, которая изменяет два агрегатных корня - в хранилище событий я могу добавить поднятые события к двум различным потокам событий, но они не будут сохраняться атомарным способом (первый может завершиться успешно, а второй завершится неудачей).Так, что люди делают, чтобы избежать этого?

  2. На домашней странице github предлагается, чтобы вы могли использовать свободный интерфейс для настройки EventStore, однако, когда я загружаю исходный код, компилируюэто и посмотрите в примере, класс wireup, кажется, не доступен - это в другой ветке?(У меня есть мастер)

  3. Каков рекомендуемый способ обработки импликации IStoreEvents?Как синглтон похож на сессионный завод Nhibernates?

1 Ответ

5 голосов
/ 22 марта 2011
  1. В приведенном вами примере у вас фактически есть несколько единиц работы.Когда агрегат изменяется, он отправляет событие.Что-то еще слушает это событие и обрабатывает другую единицу работы и т. Д.

    То, как спроектирован EventStore, может по-прежнему соответствовать вашему сценарию, но это будут три отдельные единицы работы.Вы просто подключите решение «Salvation» от Udi к вашей собственной реализации IPublishEvents и запустите его внутри AsynchronousCommitDispatcher.В истинном DDD единичный агрегат - это единица работы - по определению это граница согласованности.

  2. Около 8 часов назад я сделал толчок, в котором беглый материал является частьюсборник.Попробуйте вытащить последнюю версию из master.

  3. IStoreEvents разработан, чтобы быть многопоточным, чтобы вы могли безопасно сконфигурировать его как одноэлементное в своем приложении.Когда вы открываете сеанс из IStoreEvents, сеанс является однопоточным и не должен совместно использоваться потоками в вашем приложении.

...