Summary
In this chapter, we've discussed the various architectural styles that you can encounter and apply to your software. We've discussed stateful and stateless services, monolithic architecture, went through service-oriented architecture, moved onto microservices, and discussed ways to scale applications, specifically using the scale cube model. Later on, we discussed various other approaches to architecture, including an event-driven one and a runtime module-based one, and showed where layering can be spotted and why it could be useful. You now also understand how to implement event sourcing and recognize when to use BFFs and Hexagonal architecture. Moreover, you now know how architecture styles can help you achieve several quality attributes and what challenges they can bring.In the next chapter, you'll learn how to know which of those attributes are important in a given system.