Foreword |
|
xv | |
Preface |
|
xix | |
Acknowledgments |
|
xxiii | |
About the Author |
|
xxv | |
Part I Introduction |
|
|
Chapter 1 What Is Design and Architecture? |
|
|
3 | (10) |
|
|
4 | (1) |
|
|
5 | (7) |
|
|
12 | (1) |
|
Chapter 2 A Tale of Two Values |
|
|
13 | (6) |
|
|
14 | (1) |
|
|
14 | (1) |
|
|
15 | (1) |
|
|
16 | (2) |
|
Fight for the Architecture |
|
|
18 | (1) |
Part II Starting with the Bricks: Programming Paradigms |
|
19 | (38) |
|
Chapter 3 Paradigm Overview |
|
|
21 | (4) |
|
|
22 | (1) |
|
Object-Oriented Programming |
|
|
22 | (1) |
|
|
22 | (1) |
|
|
23 | (1) |
|
|
24 | (1) |
|
Chapter 4 Structured Programming |
|
|
25 | (8) |
|
|
27 | (1) |
|
|
28 | (1) |
|
|
29 | (1) |
|
|
30 | (1) |
|
|
30 | (1) |
|
|
31 | (1) |
|
|
31 | (2) |
|
Chapter 5 Object-Oriented Programming |
|
|
33 | (16) |
|
|
34 | (3) |
|
|
37 | (3) |
|
|
40 | (7) |
|
|
47 | (2) |
|
Chapter 6 Functional Programming |
|
|
49 | (8) |
|
|
50 | (2) |
|
Immutability and Architecture |
|
|
52 | (1) |
|
Segregation of Mutability |
|
|
52 | (2) |
|
|
54 | (2) |
|
|
56 | (1) |
Part III Design Principles |
|
57 | (36) |
|
Chapter 7 SRP: The Single Responsibility Principle |
|
|
61 | (8) |
|
Symptom 1: Accidental Duplication |
|
|
63 | (2) |
|
|
65 | (1) |
|
|
66 | (1) |
|
|
67 | (2) |
|
Chapter 8 OCP: The Open-Closed Principle |
|
|
69 | (8) |
|
|
70 | (4) |
|
|
74 | (1) |
|
|
74 | (1) |
|
|
75 | (2) |
|
Chapter 9 LSP: The Liskov Substitution Principle |
|
|
77 | (6) |
|
Guiding the Use of Inheritance |
|
|
78 | (1) |
|
The Square/Rectangle Problem |
|
|
79 | (1) |
|
|
80 | (1) |
|
|
80 | (2) |
|
|
82 | (1) |
|
Chapter 10 ISP: The Interface Segregation Principle |
|
|
83 | (4) |
|
|
85 | (1) |
|
|
86 | (1) |
|
|
86 | (1) |
|
Chapter 11 DIP: The Dependency Inversion Principle |
|
|
87 | (6) |
|
|
88 | (1) |
|
|
89 | (2) |
|
|
91 | (1) |
|
|
91 | (2) |
Part IV Component Principles |
|
93 | (40) |
|
|
95 | (8) |
|
A Brief History of Components |
|
|
96 | (3) |
|
|
99 | (1) |
|
|
100 | (2) |
|
|
102 | (1) |
|
Chapter 13 Component Cohesion |
|
|
103 | (9) |
|
The Reuse/Release Equivalence Principle |
|
|
104 | (1) |
|
The Common Closure Principle |
|
|
105 | (2) |
|
The Common Reuse Principle |
|
|
107 | (1) |
|
The Tension Diagram for Component Cohesion |
|
|
108 | (2) |
|
|
110 | (2) |
|
Chapter 14 Component Coupling |
|
|
|
The Acyclic Dependencies Principle |
|
|
112 | (6) |
|
|
118 | (2) |
|
The Stable Dependencies Principle |
|
|
120 | (6) |
|
The Stable Abstractions Principle |
|
|
126 | (6) |
|
|
132 | (1) |
Part V Architecture |
|
133 | (142) |
|
Chapter 15 What Is Architecture? |
|
|
135 | (12) |
|
|
137 | (1) |
|
|
138 | (1) |
|
|
138 | (1) |
|
|
139 | (1) |
|
|
140 | (2) |
|
|
142 | (2) |
|
|
144 | (1) |
|
|
145 | (1) |
|
|
146 | (1) |
|
|
147 | (12) |
|
|
148 | (1) |
|
|
149 | (1) |
|
|
149 | (1) |
|
|
150 | (1) |
|
|
150 | (1) |
|
|
151 | (1) |
|
|
152 | (1) |
|
|
153 | (1) |
|
Independent Develop-ability |
|
|
153 | (1) |
|
Independent Deployability |
|
|
154 | (1) |
|
|
154 | (1) |
|
|
155 | (3) |
|
|
158 | (1) |
|
Chapter 17 Boundaries: Drawing Lines |
|
|
159 | (16) |
|
|
160 | (3) |
|
|
163 | (2) |
|
Which Lines Do You Draw, and When Do You Draw Them? |
|
|
165 | (4) |
|
What About Input and Output? |
|
|
169 | (1) |
|
|
170 | (2) |
|
|
172 | (1) |
|
|
173 | (2) |
|
Chapter 18 Boundary Anatomy |
|
|
175 | (8) |
|
|
176 | (1) |
|
|
176 | (2) |
|
|
178 | (1) |
|
|
179 | (1) |
|
|
179 | (1) |
|
|
180 | (1) |
|
|
181 | (2) |
|
Chapter 19 Policy and Level |
|
|
183 | (6) |
|
|
184 | (3) |
|
|
187 | (2) |
|
Chapter 20 Business Rules |
|
|
189 | (6) |
|
|
190 | (1) |
|
|
191 | (2) |
|
Request and Response Models |
|
|
193 | (1) |
|
|
194 | (1) |
|
Chapter 21 Screaming Architecture |
|
|
195 | (6) |
|
The Theme of an Architecture |
|
|
196 | (1) |
|
The Purpose of an Architecture |
|
|
197 | (1) |
|
|
197 | (1) |
|
Frameworks Are Tools, Not Ways of Life |
|
|
198 | (1) |
|
|
198 | (1) |
|
|
199 | (2) |
|
Chapter 22 The Clean Architecture |
|
|
201 | (10) |
|
|
203 | (4) |
|
|
207 | (2) |
|
|
209 | (2) |
|
Chapter 23 Presenters and Humble Objects |
|
|
211 | (6) |
|
The Humble Object Pattern |
|
|
212 | (1) |
|
|
212 | (1) |
|
|
213 | (1) |
|
|
214 | (1) |
|
|
214 | (1) |
|
|
215 | (1) |
|
|
215 | (2) |
|
Chapter 24 Partial Boundaries |
|
|
217 | (4) |
|
|
218 | (1) |
|
One-Dimensional Boundaries |
|
|
219 | (1) |
|
|
220 | (1) |
|
|
220 | (1) |
|
Chapter 25 Layers and Boundaries |
|
|
221 | (10) |
|
|
222 | (1) |
|
|
223 | (3) |
|
|
226 | (1) |
|
|
227 | (1) |
|
|
228 | (3) |
|
Chapter 26 The Main Component |
|
|
231 | (8) |
|
|
232 | (5) |
|
|
237 | (2) |
|
Chapter 27 Services: Great and Small |
|
|
239 | (10) |
|
|
240 | (1) |
|
|
240 | (2) |
|
|
242 | (2) |
|
|
244 | (1) |
|
|
245 | (1) |
|
|
246 | (1) |
|
|
247 | (2) |
|
Chapter 28 The Test Boundary |
|
|
249 | (6) |
|
Tests as System Components |
|
|
250 | (1) |
|
|
251 | (1) |
|
|
252 | (1) |
|
|
253 | (2) |
|
Chapter 29 Clean Embedded Architecture |
|
|
255 | (20) |
|
|
258 | (3) |
|
The Target-Hardware Bottleneck |
|
|
261 | (12) |
|
|
273 | (2) |
Part VI Details |
|
275 | (48) |
|
Chapter 30 The Database Is a Detail |
|
|
277 | (8) |
|
|
278 | (1) |
|
Why Are Database Systems So Prevalent? |
|
|
279 | (1) |
|
What If There Were No Disk? |
|
|
280 | (1) |
|
|
281 | (1) |
|
But What about Performance? |
|
|
281 | (1) |
|
|
281 | (2) |
|
|
283 | (2) |
|
Chapter 31 The Web Is a Detail |
|
|
285 | (6) |
|
|
286 | (2) |
|
|
288 | (1) |
|
|
289 | (2) |
|
Chapter 32 Frameworks Are Details |
|
|
291 | (6) |
|
|
292 | (1) |
|
|
292 | (1) |
|
|
293 | (1) |
|
|
294 | (1) |
|
|
295 | (1) |
|
|
295 | (2) |
|
Chapter 33 Case Study: Video Sales |
|
|
297 | (6) |
|
|
298 | (1) |
|
|
298 | (2) |
|
|
300 | (2) |
|
|
302 | (1) |
|
|
302 | (1) |
|
Chapter 34 The Missing Chapter |
|
|
303 | (20) |
|
|
304 | (2) |
|
|
306 | (2) |
|
|
308 | (2) |
|
|
310 | (5) |
|
The Devil Is in the Implementation Details |
|
|
315 | (1) |
|
Organization versus Encapsulation |
|
|
316 | (3) |
|
|
319 | (2) |
|
Conclusion: The Missing Advice |
|
|
321 | (2) |
Part VII Appendix |
|
323 | (52) |
|
Appendix A Architecture Archaeology |
|
|
325 | (50) |
Index |
|
375 | |