While preparing a TDD workshop, I ported Kent Beck’s Money example from the book “Test-Driven Development by Example”
- to C#
- using .NET Core
I’ve tried to map each change described in the book to a dedicated git commit with a sensible commit message. It turned out being about 100 commits. The “micro-commits” are for teaching & learning (“step-by-step”). Here’s a screenshot:
The solution includes the “trick” of extracting an “Expression” interface to deal with money operations:
“Ward Cunningham came up with the ‘trick’ a decade ago,and I haven’t seen it independently duplicated yet, so it must be a tricky trick.”
Kent’s solution shows how TDD can lead to well-crafted code. Complying to OO (Object-Oriented) best practices, such as
- Encapsulation (aka information hiding),
- “Tell, don’t ask” (aka Hollywood principle),
- SRP (Single Responsibility Principle),
- SLA (Single Level of Abstraction)
just to name a few.
After finishing this exercise, I stumbled upon Mark Seeman’s post https://blog.ploeh.dk/2017/10/16/money-monoid/ which shows that this solution also conforms to Functional Programming (FP) best practices. Money is a Monoid. Which is one of the FP pillars for making things composable.
Feel free to use the code to your liking: