Sto cercando di capire la differenza tra questi due termini. In alcuni contesti questi due termini sono stati usati in modo intercambiabile. Qual è la differenza esatta tra questi due termini?
Un Odore di codice è qualcosa che dovrebbe essere studiato. È un pezzo di formaggio delizioso o è carne di maiale marcio? Un Anti-Pattern è solo cattivo, un Odore di Codice è qualcosa che può o non può essere cattivo.
Questa citazione dalla pagina Wiki è estremamente pertinente (l'enfasi è della fonte originale):
Note that a CodeSmell is a hint that something might be wrong, not a certainty. A perfectly good idiom may be considered a CodeSmell because it's often misused, or because there's a simpler alternative that works in most cases. Calling something a CodeSmell is not an attack; it's simply a sign that a closer look is warranted.
Un Anti-Pattern è un Pattern che, quando lo segui, ti porterà verso un design peggiore nello stesso in modo che un Pattern ti guidi verso un design migliore:
An AntiPattern is a pattern that tells how to go from a problem to a bad solution. […] In the old days, we used to just call these 'bad ideas'. The new name is much more diplomatic.
"Gli odori del codice" sono un giudizio offensivo sul codice di qualcuno, basato sull'applicazione cieca di alcune regole senza comprenderlo. È una parola usata da alcuni programmatori anti-sociali. MAI usare questa parola in mia presenza. Non sarai felice.
Un "modello" è qualcosa che molte persone usano per risolvere qualche tipo di problema. Un "anti-pattern" è uno schema che non funziona e ti mette nei guai. "Pattern" è spesso usato anche per indicare "un modello che funziona" poiché le cose che non funzionano di solito non diventano schemi.
Leggi altre domande sui tag anti-patterns source-code code-smell