Если смотреть на Redux приложения с точки зрения DDD/ES, то можно провести следующие аналогии:

  • Action creators (в первую очередь асинхронные: redux-thunk, redux-saga, redux-observable) — это command handlers: они достают данные из “репозитория”, изменяют их, выполняют разные side-effect’s и кидают события.
  • Actions — это события: что-то в системе уже произошло и на это надо отреагировать изменением состояния.
  • Reducers — это event store: по событиям сохраняют изменения в “репозитории”.

С точки зрения чистого ES, конечно, должен быть просто event store, а reducer’ы — это уже создание проекции данных.

С точки зрения чистого DDD должны быть отдельные агрегаты, которые считывают свое состояние из репозитория, изменяют свое состояние и сохраняют себя в репозитории, опционально кидая события.

С точки зрения Redux это все не важно, так как Redux — это реализация Flux и нефиг тут проводить всякие аналогии.

Правда, сам Redux/Flux не помогает толком ответить на вопрос когда код должен идти в reducers, а когда в action creators. Поэтому, возможно, на другие концепции и стоит поглядывать.

Show your support

Clapping shows how much you appreciated Краснояров Станислав’s story.