An Example of Over-Engineering
Keep it WET.
Join the DZone community and get the full member experience.Join For Free
This week's post is pretty short. I've already written about over-engineering, but this adds a personal touch.
I had to rewrite my Jet Train demo to use another data provider, switching from a Swiss one to a Bay Area one. One of the main components of the demo is a streaming pipeline.
- Reads data from a web endpoint.
- Transforms data through several steps.
- Writes the final data into an in-memory data grid.
Most of the transform steps in #2 enrich the data. Each of them requires an implementation of a
These implementations all follow the same pattern:
- We evaluate the second parameter of the
- If it is
null, we return the first parameter;
- if not, we use the second parameter to enrich the first parameter with and return the result.
It looks like this snippet:
In the parlance of Object-Oriented Programming, this looks like the poster child for the Template Method pattern. In Functional Programming, this is plain function composition. We can move the null-check inside a shared function outside of the bi-function.
- Move the null-check out of the function.
- Factor the null-check into a
- Create a
BiFunctionvariable from the function.
- Wrap the non-null-safe
BiFunctioninto the safe one.
We can now test:
When I finished the code, I looked at the code and thought about the quote from Jurassic Park:
Your scientists were so preoccupied with whether or not they could, they didn't stop to think if they should.
I'm no scientist, but I felt it applied to the work I just did. I realized that I refactored in order to comply with the DRY principle. When looking at the code, it didn't look more readable and the code added to every function was minimal anyway. I threw away my refactoring work in favor of the WET principle.
There are two lessons here:
- Think before you code — this one I regularly forget.
- Don't be afraid to throw away your code.
Originally published at A Java Geek on April 14th, 2021
Published at DZone with permission of Nicolas Fränkel, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.