Hey ranchers,
Just thought I'd let you all know I passed - yay!
I'd like to thank the great people who contribute to this board, probably wouldn't have made it without the valuable amount of information contained here
In particular I'd like to thank first and foremost both
Roel De Nijs and
Roberto Perillo for their dedication and commitment to answering questions on this board - it must get so repetitive hearing the same things all the time but it helps!
I'd also like to thank others on this board, like Michael Grossenbacher, Alecsandru Cocarla and Pedro Kowalski for their contributions.
So a few details about my project:
General
- I had URLybird (not sure which version).
- Started around 12/06/2010, submitted on 09/11/2010. It actually took me while to get into the swing of things, initially, but I eventually found motivation
- 58
Java Classes total
- Used a modified version of
Roel's ant script to compile, run pre-build tests, assemble and run post-build tests
- Used
TestNG for
unit tests
- Used
Windowlicker for Swing GUI tests.
- Used
Mockito for mocking and stubbing of Objects.
- 3000+ Unit tests (most of them were parallel tests on the Data class).
- Used a three-tier architecture.
- Only produced plain-text documentation (no HTML) for user guide.
- Avoided statics and singletons where possible - relied on dependency injection for testable code - see
here.
Data layer
- Used a record cache (so much easier than an IO based solution)
- Used Immutable Room objects to model the data.
- Statically defined the database schema
- Implemented logging in this layer.
- Did NOT synchronize all methods of the Data class - used
Thread safe data structures in java.util.concurrent.
- Created my own Thread-safe LockableRecord class which stores lock cookie, lock state and acts as a monitor.
Service layer
- Used RMI
- Only defined two methods - bookRoom and findByCriteria
- Used Factory
pattern to control how Services are constructed for the Presentation layer
- Did NOT use any singletons
GUI
- Kept it really simple and minimalistic
- Validated input where possible - e.g. no letters allowed for the port number field, or customer id dialog.
- Tooltips and Mnemonics everywhere.
- No icons.
- No contextual help.
- No GUI when running in Server mode.
- Encapsulated long running tasks within a modal, task running dialog - so as to not block the GUI.
And that's about all I can really think of. I'll post up my Data layer tests if people are interested - let me know by posting comments if you'd like to see them or not ;)
Cheers,
Jason