Why can't programmers design software?
qnoid.com
qnoid.com
What's the point of wrapping an algorithm in strategy, when there is no reuse, nor any need to exchange algorithm?
And more. Why FizzBuzz(15), Buzz(5), Fizz(3); in enum and not in the constructor?
Why "mod" attribute, when the rest of the code doesn't use shortened words? It should be modulo.
Why FizzBuzzOperator when FizzBuzzStrategy's initialization is that easy? Also, again there's no requirement for reusability.
The code here is a classic example of why people make jokes about (usually in J2EE) overengineering solutions where even FizzBuzz will be designed for 1000MD-average-task-size scale.
I have switched to Clojure for good. Our FizzBuzzes are oneliners http://www.learningclojure.com/2014/05/fizz-buzz-interview-q...
Because in the precious few hours they have to devote to "pure learning", when between jobs -- they're only motivated to hunker down and bone up the only thing that really matters: the latest tips 'n' tricks for passing all those fun programming quizzes (and the occasional "culture fit" question or two) that are the mainstay of the modern interview process.
Designing real, usable, maintainable ... software? That's much more difficult to "test" for.
The best experiences I've had programming are with languages and tooling that make this organic growth and splitting process as painless as possible (Rust in particular is really strong in this aspect). Doing such a thing from the top down (as with Java, where you have to be very thorough with your design patterns and UML diagrams and whatnot) seems unnecessarily difficult and restrictive.
[1] https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpris...