If
CodeDeodorant is a coding pattern/principle removes a
CodeSmell without removing its cause, then
CodePerfume is one of those
CodeDeodorants that introduces its own
CodeSmells even while masking others.
An example is
TellDontAsk, especially when implemented in an
ObjectOriented language with
closed class definitions (i.e. where programmers cannot modify the methods of an object without modifying the source-code of that object's class).
TellDontAsk masks a
FeatureEnvy smell, but introduces other smells by both violating the
OneResponsibilityRule and tightly coupling the class vocabulary to the project that uses it - a serious blow to reuse and modularity.
Of course, the ability to choose
how the
CodeSmells is an advantage.
As with those sticks of underarm deodorants we can purchase in real life, it is likely that most
CodeDeodorant is at least slightly 'perfumed' and will introduce its own
CodeSmells.