14 Metaprogramming instead of duplication convention over duplication, good or bad? programming CSharp java metaprogramming reflection unit testing mocking