Same basic presentation as my JavaOne version, with some graphics replaced by .NET equivalents. I presented this one to Dot Net user groups in Germany and Switzerland.
63. IdeallyâŚ
Start with a loose âarchitectureâ
Let suitable architecture emerge, without âbaggageâ
64. IdeallyâŚ
Start with a loose âarchitectureâ
Let suitable architecture emerge, without âbaggageâ
At some point stronger, higher-level abstractions are needed
65. IdeallyâŚ
Start with a loose âarchitectureâ
Let suitable architecture emerge, without âbaggageâ
At some point stronger, higher-level abstractions are needed
(~50Kloc â Martin, Foote)
66. IdeallyâŚ
Start with a loose âarchitectureâ
Let suitable architecture emerge, without âbaggageâ
At some point stronger, higher-level abstractions are needed
(~50Kloc â Martin, Foote)
Structure, Modularize, Define
67. IdeallyâŚ
Start with a loose âarchitectureâ
Let suitable architecture emerge, without âbaggageâ
At some point stronger, higher-level abstractions are needed
(~50Kloc â Martin, Foote)
Structure, Modularize, Define
Iterate with development
68. IdeallyâŚ
Start with a loose âarchitectureâ
Let suitable architecture emerge, without âbaggageâ
At some point stronger, higher-level abstractions are needed
(~50Kloc â Martin, Foote)
Restructure to defined architecture
Iterate with development
Strengthen with growth
73. Erosion
âSometimes the developers manage to maintain this purity of design
through the initial development and into the first release. More often
something goes wrong. The software starts to rot like a piece of bad
meat.â
Bob Martin, âAgile Software Developmentâ
85. CostâŚ
Miserable developers
Cost per feature increases
Unexpected impacts of change
Unreliable schedules
Test cycles increase
Reuse less
Value of your code base declines
110. Refactoring
⢠âChanging code without
modifying behavior to
improve nonfunctional
attributes.â
Restructuring
⢠âReorganizing a code-base
without modifying the code to
improve modularityâ
111. Refactoring
⢠âChanging code without
modifying behavior to
improve nonfunctional
attributes.â
⢠Code is readable
Restructuring
⢠âReorganizing a code-base
without modifying the code to
improve modularityâ
⢠Code-base is understandable
112. Refactoring
⢠âChanging code without
modifying behavior to
improve nonfunctional
attributes.â
⢠Code is readable
⢠A lot of invasive code editing
Restructuring
⢠âReorganizing a code-base
without modifying the code to
improve modularityâ
⢠Code-base is understandable
⢠Minimal invasive code editing
113. Refactoring
⢠âChanging code without
modifying behavior to improve
nonfunctional attributes.â
⢠Code is readable
⢠A lot of invasive code editing
⢠Scope: small worlds of a few
classes at a time; what you see
in the IDE.
Restructuring
⢠âReorganizing a code-base
without modifying the code to
improve modularityâ
⢠Code-base is understandable
⢠Minimal invasive code editing
⢠Scope: whole code base; what
you donât see in the IDE
121. ModularizationâŚ
Decouple implementation levels?
Physical or virtual?
Top-down or bottom-up?
Create structural model (structure, modularize)
Define/communicate architecture
Repair violations in the implementation levels
Align physical structure with model