Exploring event-driven architecture
We can think of an application as a series of modules, each focused on a single area of functionality, such as sales, billing, service, order management, and so on. A customer will typically move through many of these different modules within their life cycle, which we need to account for. For example, they may begin in the sales system as a prospect, before a deal with them is closed, upon which they enter both the billing and order management systems. Later, they may need assistance from the service department with their order during its processing, or after the order has been delivered.
While these separate modules are related, we can think of the interactions between them as being based on a series of events. For example, the deal being closed is an event that the sales module can notify other modules about. Similarly, the order being dispatched is an event that the order management system can notify the other modules about.
By thinking...