Microwave is a Framework to create event driven microservices. It helps you implement Eventsourcing and CQRS and lets you implement your domain and not have you worried about distributing your domain events or storing them. The generated service network is able to transfer the domain events by itself and is not dependant on a central unit.
Keeping Microservices independant from each other is key if you want to build a system that aims to not become the
"Distributed Monolith". Microwave is a framework that supports the idea of "Self Contained Systems" by delivering a
infrastructure that helps you transfer changes in your domain through your system without any headache. The key
element is a event driven architecture that evolves around domain events. If something of value happens in your
domain, you persist a domain event and microwave distributes the event to all services that are subscribed to this
event asynchronously. Therefore Microwave uses the IEventstore
that persists the domain events of a service. To
subscribe to events, you just implement a IHandleAsync<T>
Interface where T
is the type of a domain event and
microwave transfers the events to this handler as soon as they happen in your domain. With this mechanism Microwave
also offers an easy way to implement readmodels by implementing the IHandle<T>
interface that also transfers the
domain events to your objects, so you only have to do the mapping and your readmodel gets updated everytime anything
happens in your domain. The general workflow looks like this: