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
Software Quality
The book presents a comprehensive discussion on software quality issues and software quality assurance (SQA) principles …
book
Software Mistakes and Tradeoffs
Optimize the decisions that define your code by exploring the common mistakes and intentional tradeoffs made …
video
Software Architecture Superstream: Software Architecture Patterns
Just as developers use design patterns in software development, architects use architecture patterns to define the …
video
Beyond accidental architecture
Software systems always express some form of architecture. Many times those architectures reflect the mere circumstances …