Software Architecture with C++ : design modern systems using effective architecture concepts design patterns and techniques with C++20 Cover Title Page Copyrights Dedication Contributors Table of Contents Preface Section 1: Concepts and Components of Software Architecture Chapter 1: Importance of Software Architecture and Principles of Great Design Technical requirements Understanding software architecture Different ways to look at architecture Learning the importance of proper architecture Software decay Accidental architecture Exploring the fundamentals of good architecture Architecture context Stakeholders Business and technical environments Developing architecture using Agile principles Domain driven design The philosophy of C++ Following the SOLID and DRY principles Single responsibility principle Open closed principle Liskov substitution principle Interface segregation principle Dependency inversion principle The DRY rule Coupling and cohesion Coupling Cohesion Summary Questions Further reading Chapter 2: Architectural Styles Technical requirements Deciding between stateful and stateless approaches Stateless and stateful services Understanding monoliths why they should be avoided and recognizing exceptions Understanding services and microservices Microservices Benefits and disadvantages of microservices Characteristics of microservices Microservices and other architectural styles Scaling microservices Transitioning to microservices Exploring event based architecture Common event based topologies Event sourcing Understanding layered architecture Backends for Frontends Learning module based architecture Summary Questions Further reading Chapter 3: Functional and Nonfunctional Requirements Technical requirements documentation from sources you must have Understanding the types of requirements.