Software Development

The Feature Magnet

God, I hate enum in Java. (Well, I don’t, but it got your attention didn’t it!?)

Here’s a simple chain of events, leading to an odd conclusion:

  • We have a component that can do processing based on configuration
  • We decide to put the different operations it could do into an enum so that we control the valid values
  • The code that correlates from the enum to the algorithm to process each operation goes into the same library as the enum (or a parallel library, it doesn’t really matter)
  • More corners of the system use this processing-based-on-configuration because it’s good
  • So we add more operations to the enum
  • And the library gets bigger
  • And contains specific features used from across the system
  • And they have no particular relationship with each other

Somehow, the development process here has violated the open-closed principle without us noticing.

The Feature Magnet

The problem we found ourselves facing was that a popular mechanism had to accumulate everybody’s features in order to do its job. This was because it was built in a way which meant that every time it needed extending it also needed modifying.

In languages like Java, where enum is the go-to place to constrain a set of values, it’s easy to fall into the above trap. How would you ensure that all the possible operation names were unique and that only valid operations could be parsed? Yet, if you centralise this mechanism fully, you end up attracting unrelated concerns into it.

The short answer is that an enum is for a closed set of values. For more open, extensible mechanisms, you need something else. When extending a core technique, extension should be done by composition rather than modification.

Other Magnetic Properties

Generally, it’s either bad design or popularity (or both) that leads to a domain gaining things from outside of a central problem space.

If a dev team does a particularly good job building something, it’s common for the users to demand more features go into the system. This can lead to the Kitchen Drawer Application, full of loads of unrelated stuff that’s kind of useful.

Such magnets are easier to construct than they are to maintain and restructure.

Be careful of what you’re attracted to!

Published on Java Code Geeks with permission by Ashley Frieze, partner at our JCG program. See the original article here: The Feature Magnet

Opinions expressed by Java Code Geeks contributors are their own.

Ashley Frieze

Software developer, stand-up comedian, musician, writer, jolly big cheer-monkey, skeptical thinker, Doctor Who fan, lover of fine sounds
Notify of

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Inline Feedbacks
View all comments
Back to top button