node -v
Hi, I'm looking to "gradually" incorporate some of the meteor-space cqrs/eventsourcing stuff you guys have. My current need is pretty light on business logic, but more on the side of needing to update multiple collections (projections) based on something happening. I've been looking at the test_application.coffee and unit tests. It seems realtively straightforward, but one thing that isn't clear to me is how to handle aggregate initialization. It's probably due to other frameworks I've used (e.g. Axon for Java). So just to be clear, to send a command to MyAggregate(id:123). I first need to create a new instance of MyAggregate (using the id), then call .handle(command)?
It's just a little confusing to me, as say Axon,node-cqrs, basically have you just register all your aggregates, then send your commands to a gateway/handler, that then is responsible for routing, instantiation, etc.
As this is an existing app, I can't quite leverage all the cool features you guys seem to have in your full stack. So for now I just need to send commands from my existing code.
@eoliphan: Hi :)
One instance of the Space.eventSourcing.Router
is routing domain commands to all aggregate instances of the some type. For example this is the router that is routing command to instances of Todos.TodoList
aggregate:
https://github.com/meteor-space/todos/blob/master/packages/domain/source/server/todos/todo-router.js#l3
Router has specialinitializingMessage
attribute and that is the command that instantiates new instances of the aggregate:
https://github.com/meteor-space/todos/blob/master/packages/domain/source/server/todos/todo-router.js#l5
Other commands that are routed to the aggregate instances are defined in routeCommands
array:
https://github.com/meteor-space/todos/blob/master/packages/domain/source/server/todos/todo-router.js#l7-l13
Please feel free to ask more questions if you have them. Also take a look at this sample app, it can help you understand how everything is wired up:
https://github.com/meteor-space/todos
This diagram can serve as a cheat sheet for understanding complete, non distributed Space event sourcing infrastructure:
https://raw.githubusercontent.com/meteor-space/todos/master/docs/images/todos-model.png
space:testing
package has a dependency practicalmeteor:munit
and reading the Space docs, it says Space currently only supports testing of package code and recommends this approach.Hey @fxv, you can use space:testing
with Meteor 1.3 in the same way as with package testing ;)
Please checkout the tests written for the Donations application to get a feeling for it: https://github.com/meteor-space/donations/tree/develop/packages/domain/tests (these are package-tests but it works the same way)
So just include
space:testing
space:testing-messaging
space:testing-event-sourcing
in your .meteor/packages
file and start testing your event-sourced domain logic in *.app-test-js
files