{"_id":"5625969d23053b2300f59733","project":"56000f0d8c0c9d0d00dcad21","version":{"_id":"56000f0e8c0c9d0d00dcad24","project":"56000f0d8c0c9d0d00dcad21","__v":13,"createdAt":"2015-09-21T14:07:10.176Z","releaseDate":"2015-09-21T14:07:10.176Z","categories":["56000f0e8c0c9d0d00dcad25","56008f2497f69f1700f21a36","560091601503430d007cc936","560e0d8054af2b0d005bbe92","560e3ce7ad6b200d00ff471c","560e3cf2c4e4ae0d00b42ed1","561c81d0e822e12b00e1fe00","561c81e9e822e12b00e1fe01","561c823d20b4a92b007d5147","56257f8951bf1c0d001f660a","562d5f165bd25e0d0054dbd4","562d68d5d38b650d0044472a","56421aebb0dc090d00f88438"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"1.0.0","version":"1.0"},"user":"5600910981a9670d006d144f","__v":5,"category":{"_id":"561c81d0e822e12b00e1fe00","__v":5,"pages":["561c8359f067153500bf6e2c","561c8433b1e87c0d00eee837","561c8502a46cd40d00b11d9d","561c85ace822e12b00e1fe0a","5625969d23053b2300f59733"],"project":"56000f0d8c0c9d0d00dcad21","version":"56000f0e8c0c9d0d00dcad24","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2015-10-13T04:00:16.895Z","from_sync":false,"order":4,"slug":"spaceevent-sourcing","title":"space:event-sourcing"},"githubsync":"","updates":[],"next":{"pages":[],"description":""},"createdAt":"2015-10-20T01:19:25.156Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[]},"auth":"required","params":[],"url":""},"isReference":false,"order":0,"body":"`meteor add space:event-sourcing`\n\nThis package is a simple implementation of a (non-distributed) version of the DDD + CQRS + Event Sourcing patterns. It provides a base class for event-sourced Aggregates and ProcessManagers as well as serializable ValueObjects to model your business domain.\n\nIt also provides a basic implementation of a MongoDB based EventStore which works a little bit different than \"normal\" event store implementations because MongoDB doesn't support transactions. To circumvent this downside of MongoDB this package uses the concept of a commit which bundles multiple events and commands together into one \"transaction\" commit. [Here is a short blog article talking about the basic concept](http://blingcode.blogspot.co.at/2010/12/cqrs-building-transactional-event-store.html).\n\nIt heavily uses the space-messaging package for Meteor EJSON and runtime-checked domain events and commands that are automatically serialized into the MongoDB and restored for you. So you don't have to deal with serialization concerns anywhere but within your value objects.","excerpt":"","slug":"space-event-sourcing-the-basic","type":"basic","title":"space:event-sourcing The Basics"}

space:event-sourcing The Basics


`meteor add space:event-sourcing` This package is a simple implementation of a (non-distributed) version of the DDD + CQRS + Event Sourcing patterns. It provides a base class for event-sourced Aggregates and ProcessManagers as well as serializable ValueObjects to model your business domain. It also provides a basic implementation of a MongoDB based EventStore which works a little bit different than "normal" event store implementations because MongoDB doesn't support transactions. To circumvent this downside of MongoDB this package uses the concept of a commit which bundles multiple events and commands together into one "transaction" commit. [Here is a short blog article talking about the basic concept](http://blingcode.blogspot.co.at/2010/12/cqrs-building-transactional-event-store.html). It heavily uses the space-messaging package for Meteor EJSON and runtime-checked domain events and commands that are automatically serialized into the MongoDB and restored for you. So you don't have to deal with serialization concerns anywhere but within your value objects.