Process and Architecture
John Lakos

#C++
#Architecture
#Large_Scale
#Software_development
Writing reliable and maintainable C++ software is hard. Designing such software at scale adds a new set of challenges. Creating large-scale systems requires a practical understanding of logical design – beyond the theoretical concepts addressed in most popular texts. To be successful on an enterprise scale, developers must also address physical design, a dimension of software engineering that may be unfamiliar even to expert developers. Drawing on over 30 years of hands-on experience building massive, mission-critical enterprise systems, John Lakos shows how to create and grow Software Capital. This groundbreaking volume lays the foundation for projects of all sizes and demonstrates the processes, methods, techniques, and tools needed for successful real-world, large-scale development.
Up to date and with a solid engineering focus, Large-Scale C++, Volume I: Process and Architecture, demonstrates fundamental design concepts with concrete examples. Professional developers of all experience levels will gain insights that transform their approach to design and development by understanding how to
This is the first of John Lakos’s three authoritative volumes on developing large-scale systems using C++. This book, written for fellow software practitioners, uses familiar C++ constructs to solve real-world problems while identifying (and motivating) modern C++ alternatives. Together with the forthcoming Volume II: Design and Implementation and Volume III: Verification and Testing, Large-Scale C++ offers comprehensive guidance for all aspects of large-scale C++ software development. If you are an architect or project leader, this book will empower you to solve critically important problems right now – and serve as your go-to reference for years to come.
Table of Contents
Chapter 0: Motivation
0.1 The Goal: Faster, Better, Cheaper!
0.2 Application vs. Library Software
0.3 Collaborative vs. Reusable Software
0.4 Hierarchically Reusable Software
0.5 Malleable vs. Stable Software
0.6 The Key Role of Physical Design
0.7 Physically Uniform Software: The Component
0.8 Quantifying Hierarchical Reuse: An Analogy 0.9 Software Capital
0.10 Growing the Investment
0.11 The Need for Vigilance
0.12 Summary
Chapter 1: Compilers, Linkers, and Components
1.1 Knowledge Is Power: The Devil Is in the Details
1.2 Compiling and Linking C +
1.3 Declarations, Definitions, and Linkage 1.4 Header Files
1.5 Include Directives and Include Guards 1.6 From .h /.cpp Pairs to Components 1.7 Notation and Terminology
1.8 The Depends-On Relation
1.9 Implied Dependency
1.10 Level Numbers
1.11 Extracting Actual Dependencies 1.12 Summary
1.12 Summary
Chapter 2: Packaging and Design Rules
2.1 The Big Picture
2.2 Physical Aggregation
2.3 Logical/Physical Coherence
2.4 Logical and Physical Name Cohesion 2.5 Component Source-Code Organization 2.6 Component Design Rules
2.7 Component-Private Classes and Subordinate Components
2.8 The Package
2.9 The Package Group
2.10 Naming Packages and Package Groups 2.11 Subpackages
2.12 Legacy, Open-Source, and Third-Party Software
2.13 Applications
2.14 The Hierarchical Testability Requirement 2.15 From Development to Deployment 2.16 Metadata
2.17 Summary
Chapter 3: Physical Design and Factoring
3.1 Thinking Physically
3.2 Avoiding Poor Physical Modularity
3.3 Grouping Things Physically That Belong Together Logically
3.4 Avoiding Cyclic Link-Time Dependencies
3.5 Levelization Techniques
3.6 Avoiding Excessive Link-Time Dependencies
3.7 Lateral vs. Layered Architectures
3.8 Avoiding Inappropriate Link-Time Dependencies
3.9 Ensuring Physical Interoperability
3.10 Avoiding Unnecessary Compile-Time Dependencies
3.11 Architectural Insulation Techniques
3.12 Designing with Components
3.13 Summary
Conclusion
Appendix: Quick Reference
About the author
John Lakos is a senior architect and mentor for software development at Bloomberg LP, where he created the BDE team (c. 2001), which maintains Bloomberg's open-source foundation libraries for C++ development worldwide.









