Book description
Today’s programmers don’t develop software systems from scratch. Instead, they spend their time fixing, extending, modifying, and enhancing existing software. Legacy systems often turn into an unwieldy mess that becomes increasingly difficult to modify, and with architecture that continually accumulates technical debt.
Carola Lilienthal has analyzed more than 300 software systems written in Java, C#, C++, PHP, ABAP, and TypeScript and, together with her teams, has successfully refactored them. This book condenses her experience with monolithic systems, architectural and design patterns, layered architectures, domain-driven design, and microservices.
With more than 200 color images from real-world systems, good and sub-optimal sample solutions are presented in a comprehensible and thorough way, while recommendations and suggestions based on practical projects allow the reader to directly apply the author’s knowledge to their daily work.
Table of contents
- Cover
- Über den Autor
- Titel
- Impressum
- Foreword
- Preface
- Table of Contents
-
1 Introduction
- 1.1 Software Architecture
- 1.2 Sustainability
- 1.3 Technical Debt
- 1.3.1 No Knowledge of Software Architecture
- 1.3.2 Complexity and Size
- 1.3.3 Architectural Erosion Takes Place Unnoticed
- 1.3.4 We Don’t Pay Extra For Quality!
- 1.3.5 Types of Technical Debt
- 1.4 The Systems I Have Seen
- 1.5 Who Is This Book For?
- 1.6 How To Use This Book?
- 2 Tracking Down Technical Debt
- 3 Architecture in Programming Languages
- 4 Architecture Analysis and Improvement
-
5 Cognitive Psychology and Architectural Principles
- 5.1 Modularity
- 5.1.1 Chunking
- 5.1.2 Transfer to Design Principles
- 5.1.2.1 Units
- 5.1.2.2 Public Interface
- 5.1.2.3 Coupling
- 5.2 Pattern Consistency
- 5.2.1 Establishing Schemata
- 5.2.2 Transfer to Design Principles
- 5.3 Hierarchy
- 5.3.1 Formation of Hierarchies
- 5.3.2 Transfer to Design Principles
- 5.4 Cycles = Failed modularity + Pattern
- 5.5 Consequences for Architectural Analysis
-
6 Architectural Styles that Reduce Technical Debt
- 6.1 Rules of Architectural Styles
- 6.2 Separation of Business and Technical Building Blocks
- 6.3 Layered Architecture
- 6.3.1 Technical Layering
- 6.3.2 Domain Layering
- 6.3.3 The Infrastructure Layer
- 6.3.4 Integration of Domain-oriented Layers
- 6.4 Hexagonal, Onion, and Clean Architecture
- 6.5 Microservices and Domain-Driven Design
- 6.6 Pattern Languages
- 6.6.1 The Tool & Material Pattern Language
- 6.6.2 The DDD Pattern Language
- 6.6.3 Typical Framework Patterns
- 6.7 Sustainability and Architectural Styles
-
7 Pattern in Software Architecture
- 7.1 Mapping the Target to the Actual Architecture
- 7.2 The Ideal Structure: Domain-Oriented or Technical?
- 7.3 Public Interfaces for Building Block
- 7.4 Interfaces: The Architectural Miracle Cure?
- 7.4.1 Basic Therapy
- 7.4.2 Side Effects
- 7.4.3 Field Studies on “Living Patients”
- 7.4.4 Fighting the Monolith
- 7.5 The Need for Microservices
- 8 Pattern Languages: A True Architectural Treasure!
-
9 Chaos Within Layers: The Daily Pain
- 9.1 Evaluating the Mess
- 9.1.1 The Extent of the Chaos
- 9.1.1.1 Architectural Styles and Cycles
- 9.1.1.2 Lines of Code in Cycles
- 9.1.1.3 Dependency Injection and Cycles
- 9.1.2 Scope and Interconnectedness
- 9.1.3 Cycle Range Within an Architecture
- 9.2 The Big Ball of Mud
- 9.2.1 The Black Hole Effect
- 9.2.2 Breaking Free
- 9.2.3 “Weaponizing” Technical Layering
- 9.2.4 Pattern Language as a Lighthouse
- 9.3 Uneven Modules
- 10 Refining Modularity
- 11 Real-World Case Studies
- 12 Conclusion: The Path Toward Sustainable Architecture
- Appendix
- References
- Fußnoten
- Index
Product information
- Title: Sustainable Software Architecture
- Author(s):
- Release date: August 2019
- Publisher(s): dpunkt
- ISBN: 9783864906732
You might also like
book
Microservices vs. Service-Oriented Architecture
Right now, the microservices architecture pattern is a rising star in the IT industry. For many, …
video
Brains considered harmful: How cognitive biases undermine your software architecture
Most software engineers come up through the ranks as coders and believe that the valuable lessons …
video
Software Architecture Superstream Series: Domain-Driven Design and Event-Driven Architecture
Domain-driven design and event-driven architecture are inherently flexible and scalable, allowing organizations to build systems based …
video
Software Architecture Superstream: Software Architecture Patterns
Just as developers use design patterns in software development, architects use architecture patterns to define the …