Solution #1 - Using a DefaultMap as lookup table and a Strategy Pattern. #5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Ok, I succeeded at removing all the conditional paths, but the resulting code is both much longer and (maybe) awful.
The idea is: the 3 paths are encapsulated into 3 separate classes, all sharing the same interface
Strategy
: we haveNullStrategy
returningnull
DoubleStrategy
returning the string repeated twiceErrorStrategy
returning the stringerror
.The class
Formatter
asks for permission, as usual, then asks for the the right strategy (based on the received permission) from the lookup dictionaryand then it delegates the execution of the job to the selected strategy
As you see, no
if
s at all.Two notes:
if
in the use ofDefaultedMap
.Is it a better design than the orginal one? I wonder. I'm looking forward to hearing from you.