CONTENTS
Foreword [part0006.html#foreword]
Preface [part0007.html#preface]
Acknowledgments [part0008.html#ack]
About the Author [part0009.html#about]
PART I Introduction [part0010.html#part1]
The Goal? [part0011.html#toclev_1]
Case Study [part0011.html#toclev_2]
Conclusion [part0011.html#toclev_3]
Chapter 2 A Tale of Two Values [part0012.html#ch2]
Behavior [part0012.html#toclev_4]
Architecture [part0012.html#toclev_5]
The Greater Value [part0012.html#toclev_6]
Eisenhower’s Matrix [part0012.html#toclev_7]
Fight for the Architecture [part0012.html#toclev_8]
PART II Starting with the Bricks: Programming Paradigms [part0013.html#part2]
Chapter 3 Paradigm Overview [part0014.html#ch3]
Structured Programming [part0014.html#toclev_9]
Object-Oriented Programming [part0014.html#toclev_10]
Functional Programming [part0014.html#toclev_11]
Food for Thought [part0014.html#toclev_12]
Conclusion [part0014.html#toclev_13]
Chapter 4 Structured Programming [part0015.html#ch4]
Proof [part0015.html#toclev_14]
A Harmful Proclamation [part0015.html#toclev_15]
Functional Decomposition [part0015.html#toclev_16]
No Formal Proofs [part0015.html#toclev_17]
Science to the Rescue [part0015.html#toclev_18]
Tests [part0015.html#toclev_19]
Conclusion [part0015.html#toclev_20]
Chapter 5 Object-Oriented Programming [part0016.html#ch5]
Encapsulation? [part0016.html#toclev_21]
Inheritance? [part0016.html#toclev_22]
Polymorphism? [part0016.html#toclev_23]
Conclusion [part0016.html#toclev_24]
Chapter 6 Functional Programming [part0017.html#ch6]
Squares of Integers [part0017.html#toclev_25]
Immutability and Architecture [part0017.html#toclev_26]
Segregation of Mutability [part0017.html#toclev_27]
Event Sourcing [part0017.html#toclev_28]
Conclusion [part0017.html#toclev_29]
PART III Design Principles [part0018.html#part3]
Chapter 7 SRP: The Single Responsibility Principle [part0019.html#ch7]
Symptom 1: Accidental Duplication [part0019.html#toclev_30]
Symptom 2: Merges [part0019.html#toclev_31]
Solutions [part0019.html#toclev_32]
Conclusion [part0019.html#toclev_33]
Chapter 8 OCP: The Open-Closed Principle [part0020.html#ch8]
A Thought Experiment [part0020.html#toclev_35]
Directional Control [part0020.html#toclev_36]
Information Hiding [part0020.html#toclev_37]
Conclusion [part0020.html#toclev_38]
Chapter 9 LSP: The Liskov Substitution Principle [part0021.html#ch9]
Guiding the Use of Inheritance [part0021.html#toclev_39]
The Square/Rectangle Problem [part0021.html#toclev_40]
LSP and Architecture [part0021.html#toclev_41]
Example LSP Violation [part0021.html#toclev_42]
Conclusion [part0021.html#toclev_43]
Chapter 10 ISP: The Interface Segregation Principle [part0022.html#ch10]
ISP and Language [part0022.html#toclev_44]
ISP and Architecture [part0022.html#toclev_45]
Conclusion [part0022.html#toclev_46]
Chapter 11 DIP: The Dependency Inversion Principle [part0023.html#ch11]
Stable Abstractions [part0023.html#toclev_47]
Factories [part0023.html#toclev_48]
Concrete Components [part0023.html#toclev_49]
Conclusion [part0023.html#toclev_50]
PART IV Component Principles [part0024.html#part4]
Chapter 12 Components [part0025.html#ch12]
A Brief History of Components [part0025.html#toclev_51]
Relocatability [part0025.html#toclev_52]
Linkers [part0025.html#toclev_53]
Conclusion [part0025.html#toclev_54]
Chapter 13 Component Cohesion [part0026.html#ch13]
The Reuse/Release Equivalence Principle [part0026.html#toclev_55]
The Common Closure Principle [part0026.html#toclev_56]
The Common Reuse Principle [part0026.html#toclev_57]
The Tension Diagram for Component Cohesion [part0026.html#toclev_58]
Conclusion [part0026.html#toclev_59]
Chapter 14 Component Coupling [part0027.html#ch14]
The Acyclic Dependencies Principle [part0027.html#toclev_60]
Top-Down Design [part0027.html#toclev_61]
The Stable Dependencies Principle [part0027.html#toclev_62]
The Stable Abstractions Principle [part0027.html#toclev_63]
Conclusion [part0027.html#toclev_64]
PART V Architecture [part0028.html#part5]
Chapter 15 What Is Architecture? [part0029.html#ch15]
Development [part0029.html#toclev_65]
Deployment [part0029.html#toclev_66]
Operation [part0029.html#toclev_67]
Maintenance [part0029.html#toclev_68]
Keeping Options Open [part0029.html#toclev_69]
Device Independence [part0029.html#toclev_70]
Junk Mail [part0029.html#toclev_71]
Physical Addressing [part0029.html#toclev_72]
Conclusion [part0029.html#toclev_73]
Chapter 16 Independence [part0030.html#ch16]
Use Cases [part0030.html#toclev_74]
Operation [part0030.html#toclev_75]
Development [part0030.html#toclev_76]
Deployment [part0030.html#toclev_77]
Leaving Options Open [part0030.html#toclev_78]
Decoupling Layers [part0030.html#toclev_79]
Decoupling Use Cases [part0030.html#toclev_80]
Decoupling Mode [part0030.html#toclev_81]
Independent Develop-ability [part0030.html#toclev_82]
Independent Deployability [part0030.html#toclev_83]
Duplication [part0030.html#toclev_84]
Decoupling Modes (Again) [part0030.html#toclev_85]
Conclusion [part0030.html#toclev_86]
Chapter 17 Boundaries: Drawing Lines [part0031.html#ch17]
A Couple of Sad Stories [part0031.html#toclev_87]
FitNesse [part0031.html#toclev_88]
Which Lines Do You Draw, and When Do You Draw Them? [part0031.html#toclev_89]
What About Input and Output? [part0031.html#toclev_90]
Plugin Architecture [part0031.html#toclev_91]
The Plugin Argument [part0031.html#toclev_92]
Conclusion [part0031.html#toclev_93]
Chapter 18 Boundary Anatomy [part0032.html#ch18]
Boundary Crossing [part0032.html#toclev_94]
The Dreaded Monolith [part0032.html#toclev_95]
Deployment Components [part0032.html#toclev_96]
Threads [part0032.html#toclev_97]
Local Processes [part0032.html#toclev_98]
Services [part0032.html#toclev_99]
Conclusion [part0032.html#toclev_100]
Chapter 19 Policy and Level [part0033.html#ch19]
Level [part0033.html#toclev_101]
Conclusion [part0033.html#toclev_102]
Chapter 20 Business Rules [part0034.html#ch20]
Entities [part0034.html#toclev_103]
Use Cases [part0034.html#toclev_104]
Request and Response Models [part0034.html#toclev_105]
Conclusion [part0034.html#toclev_106]
Chapter 21 Screaming Architecture [part0035.html#ch21]
The Theme of an Architecture [part0035.html#toclev_107]
The Purpose of an Architecture [part0035.html#toclev_108]
But What About the Web? [part0035.html#toclev_109]
Frameworks Are Tools, Not Ways of Life [part0035.html#toclev_110]
Testable Architectures [part0035.html#toclev_111]
Conclusion [part0035.html#toclev_112]
Chapter 22 The Clean Architecture [part0036.html#ch22]
The Dependency Rule [part0036.html#toclev_113]
A Typical Scenario [part0036.html#toclev_114]
Conclusion [part0036.html#toclev_115]
Chapter 23 Presenters and Humble Objects [part0037.html#ch23]
The Humble Object Pattern [part0037.html#toclev_116]
Presenters and Views [part0037.html#toclev_117]
Testing and Architecture [part0037.html#toclev_118]
Database Gateways [part0037.html#toclev_119]
Data Mappers [part0037.html#toclev_120]
Service Listeners [part0037.html#toclev_121]
Conclusion [part0037.html#toclev_122]
Chapter 24 Partial Boundaries [part0038.html#ch24]
Skip the Last Step [part0038.html#toclev_123]
One-Dimensional Boundaries [part0038.html#toclev_124]
Facades [part0038.html#toclev_125]
Conclusion [part0038.html#toclev_126]
Chapter 25 Layers and Boundaries [part0039.html#ch25]
Hunt the Wumpus [part0039.html#toclev_127]
Clean Architecture? [part0039.html#toclev_128]
Crossing the Streams [part0039.html#toclev_129]
Splitting the Streams [part0039.html#toclev_130]
Conclusion [part0039.html#toclev_131]
Chapter 26 The Main Component [part0040.html#ch26]
The Ultimate Detail [part0040.html#toclev_132]
Conclusion [part0040.html#toclev_133]
Chapter 27 Services: Great and Small [part0041.html#ch27]
Service Architecture? [part0041.html#toclev_134]
Service Benefits? [part0041.html#toclev_135]
The Kitty Problem [part0041.html#toclev_136]
Objects to the Rescue [part0041.html#toclev_137]
Component-Based Services [part0041.html#toclev_138]
Cross-Cutting Concerns [part0041.html#toclev_139]
Conclusion [part0041.html#toclev_140]
Chapter 28 The Test Boundary [part0042.html#ch28]
Tests as System Components [part0042.html#toclev_141]
Design for Testability [part0042.html#toclev_142]
The Testing API [part0042.html#toclev_143]
Conclusion [part0042.html#toclev_144]
Chapter 29 Clean Embedded Architecture [part0043.html#ch29]
App-titude Test [part0043.html#toclev_145]
The Target-Hardware Bottleneck [part0043.html#toclev_146]
Conclusion [part0043.html#toclev_147]
PART VI Details [part0044.html#part6]
Chapter 30 The Database Is a Detail [part0045.html#ch30]
Relational Databases [part0045.html#toclev_148]
Why Are Database Systems So Prevalent? [part0045.html#toclev_149]
What If There Were No Disk? [part0045.html#toclev_150]
Details [part0045.html#toclev_151]
But What about Performance? [part0045.html#toclev_152]
Anecdote [part0045.html#toclev_153]
Conclusion [part0045.html#toclev_154]
Chapter 31 The Web Is a Detail [part0046.html#ch31]
The Endless Pendulum [part0046.html#toclev_155]
The Upshot [part0046.html#toclev_156]
Conclusion [part0046.html#toclev_157]
Chapter 32 Frameworks Are Details [part0047.html#ch32]
Framework Authors [part0047.html#toclev_158]
Asymmetric Marriage [part0047.html#toclev_159]
The Risks [part0047.html#toclev_160]
The Solution [part0047.html#toclev_161]
I Now Pronounce You … [part0047.html#toclev_162]
Conclusion [part0047.html#toclev_163]
Chapter 33 Case Study: Video Sales [part0048.html#ch33]
The Product [part0048.html#toclev_164]
Use Case Analysis [part0048.html#toclev_165]
Component Architecture [part0048.html#toclev_166]
Dependency Management [part0048.html#toclev_167]
Conclusion [part0048.html#toclev_168]
Chapter 34 The Missing Chapter [part0049.html#ch34]
Package by Layer [part0049.html#toclev_169]
Package by Feature [part0049.html#toclev_170]
Ports and Adapters [part0049.html#toclev_171]
Package by Component [part0049.html#toclev_172]
The Devil Is in the Implementation Details [part0049.html#toclev_173]
Organization versus Encapsulation [part0049.html#toclev_174]
Other Decoupling Modes [part0049.html#toclev_175]
Conclusion: The Missing Advice [part0049.html#toclev_176]
PART VII Appendix [part0050.html#part7]
Appendix A Architecture Archaeology [part0051.html#appendixa]
Index [part0052.html#index]