This book provides a structured approach to modern software architecture, guiding you through the entire process from initial software requirements to the ongoing management of a system architecture.
The content begins with the fundamentals of software engineering and architecture. It covers how to analyze software requirements, distinguishing between functional criteria and non-functional quality attributes such as performance and security. It also addresses the importance of embedding the software architecture within the broader enterprise architecture, aligning it with strategic business goalsand integrating it into existing system landscapes while considering governance and compliance.
The next section focuses on the design of system and application architectures. You will learn about core principles of system design, including coupling, cohesion, and strategies for scalability and availability. The book details the process of shaping the application architecture, from data modeling and persistence concepts to the integration of user interfaces. A significant portion is dedicated to the practical application of software design patterns, covering creational, structural, and behavioral patterns to address common design challenges.
Further, the book explores procedures in software engineering and development. It discusses how architectural work is integrated into both agile and plan-driven process models. You will find guidance on procedural patterns for software architecture, such as conducting methodical architecture evaluations and moderating technical design workshops. It also covers the management of software development, including how to derive development guidelines from the architecture and manage technical debt.
Finally, the guide addresses the documentation and evolution of software architecture. It explains how to create view-based architecture descriptions and communicate them effectively to different target audiences using standardized notations. The book concludes with topics on system architecture management, such as versioning architectural decisions, planning for refactoring and modernization, and establishing an architecture-conscious culture within development teams.