Sono d'accordo, gli ultimi due sembrano essere odori di codice, e anche il primo. Ma credo che il contrasto posto in questa domanda abbia più a che fare con scegliere le strutture dati appropriate piuttosto che con schemi specifici. Andrò su ciascuno di essi, iniziando da quello che sembra perfetto.
Il numero 2 qui sopra sembra ok (presumendo che la stringa magica sia solo per brevità) e usi il concetto di < a href="https://en.wikipedia.org/wiki/Identifier"> identificatore . È meno un modello e più un concetto di base usato molto prima che esistessero i computer. In questo caso, l'identificatore scelto come stringa numerica.
Il n. 1 è un odore perché non è chiaro cosa deve essere passato per ottenere il logger giusto. "MyLogger" è un nome interno o una classe da istanziare o una stringa di connessione? Non posso dire da questa chiamata, e ho visto tutte quelle opzioni usate prima. Se assumo nuovamente che la stringa magica è per brevità, potrebbe essere accettabile se il nome della variabile e / o un commento lo chiariscono.
Il n. 3 è un odore perché usa una struttura molto fluida e facile da ottenere (un identificatore di stringa) per rappresentare un concetto molto concreto. In effetti, ci sono 2 o più stringhe corrette che puoi passare e stringhe inesatte virtualmente infinite. Questo è abbastanza concreto da essere idealmente rappresentato da una struttura validata in fase di progettazione come una classe. Quindi, quando si ottiene un nome membro errato, il codice non verrà compilato o darà un errore di sintassi. La struttura stessa è abbastanza importante che il compilatore / interprete non dovrebbe nemmeno eseguirlo se non è corretto.
Il n. 4 è un odore simile al n. 3 (nessuna struttura convalidata) e n. 1 (mancanza di chiarezza), ma meno specifico del codice B in # 3. (Supponendo che tu abbia motivi per non rappresentare le azioni usando metodi / funzioni, es. Client / server.) Puoi rappresentarlo con uno schema o due. Puoi utilizzare messaggistica o anche il GOF schema di comando , a seconda dell'applicazione specifica. Avere messaggi come classi concrete darebbe ai tuoi input una struttura validata e darà ai tuoi chiamanti un mezzo ben definito per comunicare con te.
In sintesi, la maggior parte di questi esempi evidenzia la necessità di scegliere la struttura dati appropriata. Utilizzare le stringhe per attivare i rami di codice non è abbastanza specifico per algoritmi noti come b-tree. Ma potrebbe andare bene per una connessione al database. Scegli con saggezza.