Sustainable Software Architecture

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

  1. Cover
  2. Über den Autor
  3. Titel
  4. Impressum
  5. Foreword
  6. Preface
  7. Table of Contents
  8. 1 Introduction
    1. 1.1 Software Architecture
    2. 1.2 Sustainability
    3. 1.3 Technical Debt
    4. 1.3.1 No Knowledge of Software Architecture
    5. 1.3.2 Complexity and Size
    6. 1.3.3 Architectural Erosion Takes Place Unnoticed
    7. 1.3.4 We Don’t Pay Extra For Quality!
    8. 1.3.5 Types of Technical Debt
    9. 1.4 The Systems I Have Seen
    10. 1.5 Who Is This Book For?
    11. 1.6 How To Use This Book?
  9. 2 Tracking Down Technical Debt
    1. 2.1 Building Block Terminology
    2. 2.2 Target and Actual Architecture
    3. 2.3 Improvements to a Running System
    4. 2.4 False Positives and Generated Code
    5. 2.5 Cheat Sheet for Sotograph
  10. 3 Architecture in Programming Languages
    1. 3.1 Java Systems
    2. 3.2 C# Systems
    3. 3.3 C++ Systems
    4. 3.4 ABAP Systems
    5. 3.5 PHP Systems
  11. 4 Architecture Analysis and Improvement
    1. 4.1 Developers and Architects
    2. 4.2 Working on Architecture is a “Holschuld”
    3. 4.3 Live Architecture Improvement Workshop
    4. 4.4 Dealing with Mothers and Fathers
    5. 4.5 Modularity Maturity Index (MMI)
    6. 4.6 Technical Debt in the Lifecycle
  12. 5 Cognitive Psychology and Architectural Principles
    1. 5.1 Modularity
    2. 5.1.1 Chunking
    3. 5.1.2 Transfer to Design Principles
    4. 5.1.2.1 Units
    5. 5.1.2.2 Public Interface
    6. 5.1.2.3 Coupling
    7. 5.2 Pattern Consistency
    8. 5.2.1 Establishing Schemata
    9. 5.2.2 Transfer to Design Principles
    10. 5.3 Hierarchy
    11. 5.3.1 Formation of Hierarchies
    12. 5.3.2 Transfer to Design Principles
    13. 5.4 Cycles = Failed modularity + Pattern
    14. 5.5 Consequences for Architectural Analysis
  13. 6 Architectural Styles that Reduce Technical Debt
    1. 6.1 Rules of Architectural Styles
    2. 6.2 Separation of Business and Technical Building Blocks
    3. 6.3 Layered Architecture
    4. 6.3.1 Technical Layering
    5. 6.3.2 Domain Layering
    6. 6.3.3 The Infrastructure Layer
    7. 6.3.4 Integration of Domain-oriented Layers
    8. 6.4 Hexagonal, Onion, and Clean Architecture
    9. 6.5 Microservices and Domain-Driven Design
    10. 6.6 Pattern Languages
    11. 6.6.1 The Tool & Material Pattern Language
    12. 6.6.2 The DDD Pattern Language
    13. 6.6.3 Typical Framework Patterns
    14. 6.7 Sustainability and Architectural Styles
  14. 7 Pattern in Software Architecture
    1. 7.1 Mapping the Target to the Actual Architecture
    2. 7.2 The Ideal Structure: Domain-Oriented or Technical?
    3. 7.3 Public Interfaces for Building Block
    4. 7.4 Interfaces: The Architectural Miracle Cure?
    5. 7.4.1 Basic Therapy
    6. 7.4.2 Side Effects
    7. 7.4.3 Field Studies on “Living Patients”
    8. 7.4.4 Fighting the Monolith
    9. 7.5 The Need for Microservices
  15. 8 Pattern Languages: A True Architectural Treasure!
    1. 8.1 The Treasure Hunt
    2. 8.2 Software Archaeology
    3. 8.3 From the Treasure Chest
    4. 8.4 How Much Gold Is There?
    5. 8.5 Annual Growth Rings
    6. 8.6 Unclear Patterns Provoke Cycles
  16. 9 Chaos Within Layers: The Daily Pain
    1. 9.1 Evaluating the Mess
    2. 9.1.1 The Extent of the Chaos
    3. 9.1.1.1 Architectural Styles and Cycles
    4. 9.1.1.2 Lines of Code in Cycles
    5. 9.1.1.3 Dependency Injection and Cycles
    6. 9.1.2 Scope and Interconnectedness
    7. 9.1.3 Cycle Range Within an Architecture
    8. 9.2 The Big Ball of Mud
    9. 9.2.1 The Black Hole Effect
    10. 9.2.2 Breaking Free
    11. 9.2.3 “Weaponizing” Technical Layering
    12. 9.2.4 Pattern Language as a Lighthouse
    13. 9.3 Uneven Modules
  17. 10 Refining Modularity
    1. 10.1 Building Block Cohesion
    2. 10.2 Building Block Sizes
    3. 10.3 Class Sizes
    4. 10.4 Method Size and Complexity
    5. 10.5 Loose Coupling
    6. 10.6 Coupling and Class Size
    7. 10.7 How Modular Are You?
  18. 11 Real-World Case Studies
    1. 11.1 The Java System Alpha
    2. 11.2 The C# System Gamma
    3. 11.3 The C++ System Beta
    4. 11.4 The Java System Delta
    5. 11.5 The Java System Epsilon (with C# Satellites)
    6. 11.5.1 Java-Epsilon
    7. 11.5.2 C#-Epsilon 1
    8. 11.5.3 C#-Epsilon 2
    9. 11.6 The ABAP system Lambda
  19. 12 Conclusion: The Path Toward Sustainable Architecture
  20. Appendix
    1. A Analysis Tools
    2. A.1 Lattix
    3. A.2 Sonargraph Architect
    4. A.3 Sotograph and SotoArc
    5. A.4 Structure101
  21. References
  22. Fußnoten
  23. Index

Product information

  • Title: Sustainable Software Architecture
  • Author(s): Carola Lilienthal
  • Release date: August 2019
  • Publisher(s): dpunkt
  • ISBN: 9783864906732