Skip to content

x-cellent/decs

Repository files navigation

DECS - Distributed Event and Command Sourcing toolkit

Architecture

NATS/STAN

Doing

                                                                 +-----------------------+
                                                                 |             NATS/STAN |
                                                                 |                       |
                                           marshal               |    +-------------+    |
                           +----------------------------------------->+ Topic Queue |    |
          Command          |                                     |    +------+------+    |
             +             |                                     |           |           |
             |             |                                     |         +-+-+         |
             |(1)          |(3.1)                                |         |   |         |
             |             |                                     +-----------------------+
             v             |                                               |   |
          +--+--+          |                                               |   |
+---------+ Do  +----------------------------------------------+           |   |
|         +--+--+          |                     Command Bus A |           |   |
|            |             |                                   +---+    (4)|   |(4)+
|            |   (2)   +---+---+  (3.2)  +----------------+    | B |       |   |
|            +-------->+ Guard +-------->+ Undoable Stack |    |   |       |   |
|                      +-+-+-+-+         +----------------+    |   |       |   |
|                        | | |                                 |   |       |   |
|                   (3)' | | |                                 |   |       |   |
|                X<------+ | |       (5)' +--------------+     |   |       |   |
|                          | |    X<------+ Local Filter +<----------------+   |
|                          | |            +-------+------+     |   | unmarshal |
|                          | |(3.3)               |            |   <-----------+
|                          | |                    |(5)         |   |
|                          | +--------------------+            |   |
|                          |                      |            |   |
|                          |                      v            |   |
|                          |                  +---+---+        |   |
|                          |(3.3)'            | Queue |        |   |
|            +-------+     |                  +---+---+        |   |
|            | Store |     |                      |            |   |
|            +---+---+     |                      |(6)         |   |
|                ^         +----------------------+            |   |
|                |(8.1)                           |            |   |
|                |                                v            |   |
|      (9)  +----+----+         (7)        +------+------+     |   |
|    +----->+ Handler +<-------------------+ I/C Filters |     |   |
|    |      +--+---+--+                    +------+------+     |   |
|    |         |   |                              |            |   |
|    |         |   |    (8.2)*               (7)' |            |   |
|    |   (8.3)*|   +-------------+        X<------+            |   |
|    |         |        Event    |                             |   |
|    |         v                 v                             |   |
|    |   +-----+----+      +-----+-----+                       |   |
|    +---+ Delegate |      | Event Bus |                       |   |
|        +----------+      +-----------+                       |   |
|                                                              |   |
+---+----------------------------------------------------------+   |
    |                                                              |
    +--------------------------------------------------------------+

Undoing

                                                             +-----------------------+
                                                             |             NATS/STAN |
                                                             |                       |
                                       marshal               |    +-------------+    |
                       +----------------------------------------->+ Topic Queue |    |
                       |                                     |    +------+------+    |
         +             |                                     |           |           |
         |             |                                     |         +-+-+         |
         |(1)          |(2.1)                                |         |   |         |
         |             |                                     +-----------------------+
         v             |                                               |   |
     +---+---+         |                                               |   |
+----+ Undo  +---------------------------------------------+           |   |
|    +-+-+-+-+         |                     Command Bus A |           |   |
|      | | | |         |                                   +---+    (3)|   |(3)+
|      | | | +---------+                                   | B |       |   |
|      | | |                  (2.2)  +----------------+    |   |       |   |
|      | | +------------------------>+ Redoable Stack |    |   |       |   |
|      | |                           +----------------+    |   |       |   |
|      | |                                                 |   |       |   |
|      | |                                                 |   |       |   |
|      | |(2.3)                  (4)' +--------------+     |   |       |   |
|      | |                    X<------+ Local Filter +<----------------+   |
|      | |                            +-------+------+     |   | unmarshal |
|      | |                                    |            |   <-----------+
|      | |                                    |(4)         |   |
|      | +------------------------------------+            |   |
|      |                                      |            |   |
|      +-----+                                |            |   |
|            |                                |            |   |
|            |(2.3)'                          |            |   |
|            |                                |            |   |
|            v                                v            |   |
|    +-------+------+         (5)         +---+---+        |   |
|    | Undo Handler +<--------------------+ Queue |        |   |
|    +-------+------+                     +-------+        |   |
|            |                                             |   |
|            |                                             |   |
|            |                                             |   |
|            |(6)*                                         |   |
|            |                                             |   |
|            |                          +-----------+      |   |
|            +------------------------->+ Event Bus |      |   |
|                       Event           +-----------+      |   |
|                                                          |   |
+---+------------------------------------------------------+   |
    |                                                          |
    +----------------------------------------------------------+

NSQ

     +-----------------------------------------------+
     |                                           NSQ |
     |      (1)       +-------------+                |
+-------------------->+ Topic Queue |                |
     |                +------+------+                |
     |                       |                       |
     |          +------------+------------+          |
     |          |                         |          |
     |       (2)|                         |(2+)      |
     |          v                         v          |
     |    +-----+-----+             +-----+-----+    |
     |    | Channel A +----+   +----+ Channel B +    |
     |    +-----------+    |   |    +-----------+    |
     |                     |   |                     |
     |                  (3)|   |(3+)                 |
     |                     |   |                     |
     +-----------------------------------------------+
                           |   |
                           v   v