Let's take a look back at the money example, both the process we used and the results. We will look at:
Metaphor— The dramatic effect metaphor has on the structure of the design.
JUnit Usage— When we ran tests and how we used JUnit.
Code Metrics— A numerical abstract of the resulting code.
Process— We say red/green/refactor, but how much work goes into each step?
Test Quality— How do TDD tests stack up against conventional test metrics?
Is the code finished? No. There is that nasty duplication between Sum.plus() and Money.plus(). If we made Expression a class instead of an interface (not the usual direction, as classes more often become interfaces), we would have a natural home for the common ...