DEV Community

loading...
Cover image for Code Smell 35 - State as Properties

Code Smell 35 - State as Properties

Maxi Contieri
Learn something new every day. - I am a senior software engineer working in industry, teaching and writing on software design, SOLID principles, DDD and TDD.
・1 min read

When an object changes its state the best solution is to change the attribute, isn't it?

Problems

  • Mutability

  • Attributes polluting

  • Setters

Solutions

1 - Model states as mathematical set inclusion.

2 - State is accidental, take it away from the object.

Examples

  • State diagrams

Sample Code

Wrong

Right

Detection

If we want to be extreme, we should consider every setter to be a potential state change. Linters can warn us. But we might end up getting too many false positives.

Exceptions

  • Over Design

  • Performance issues (if a serious benchmark supports it).

Tags

  • Mutation

Conclusion

This technique is very elegant but can lead to over design. For example changing a visual component its color should be a counterexample to this smell.

We should be aware and very caution like with any other smell.

They are hints and not rigid rules.

Relations

More info

Mutants

Credits

Photo by Tom Crew on Unsplash


First make the change easy (warning: this might be hard), then make the easy change.

Kent Beck

Discussion (2)

Collapse
darkwiiplayer profile image
DarkWiiPlayer

I'd go as far as to say getters and setters are always a sign of bad design in OO code. Their only real purpose in that context is as a hack when business constraints don't allow for a more solid (you can also read that as SOLID) design.

Other than that, they're useful when one needs procedural segments in an otherwise OO codebase, mostly to implement some of the lower levels of the logic. Arrays just don't work well with "tell don't ask".

Collapse
mcsee profile image
Maxi Contieri Author

I agree

Both setters and getters should be avoided most of the time.

People use them thinking they are protecting their implementation but is exactly the opposite. Next Sunday's code smell is related to that