Think of your personal bank account experience When in doubt, go for the simplest solution
Deposit and Withdrawal
Transfer
Account statement (date, amount, balance)
Statement printing
Statement filters (just deposits, withdrawal, date)
- One level of indentation per method
- Don’t use the ELSE keyword
- Wrap all primitives and Strings
- First class collections
- One dot per line
- Don’t abbreviate
- Keep all entities small (50 lines)
- No classes with more than two instance variables
- No getters/setters/properties
- Object Calisthenics pdf
- Object Calisthenics (full book), Jeff Bay in: The ThoughtWorks Anthology. Pragmatic Bookshelf 2008
- Original idea for the kata: How Object-Oriented Are You Feeling Today? - Krzysztof Jelski (Session on the Software Craftsmanship UK 2011 conference)
Started from defining an acceptance test:
Given a client makes a deposit of 1000 on 10-01-2012
And a deposit of 2000 on 13-01-2012
And a withdrawal of 500 on 14-01-2012
When she prints her bank statement
Then she would see
date || credit || debit || balance
14/01/2012 || || 500.00 || 2500.00
13/01/2012 || 2000.00 || || 3000.00
10/01/2012 || 1000.00 || || 1000.00
Do it yourself first and then compare the solutions.
The files to look at:
statement_printing.story
StatementPrintingSteps.java
Unit tests
Domain classes