When an object changes its state the best solution is to change the attribute, isn't it?
1 - Model states as mathematical set inclusion.
2 - State is accidental, take it away from the object.
- State diagrams
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.
Performance issues (if a serious benchmark supports it).
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.
First make the change easy (warning: this might be hard), then make the easy change.
This article is part of the CodeSmell Series.