2009-02-20 7 views
7

Sono l'unico che a volte prende l'apparentemente facile, ma sbagliato, fuori da certe situazioni di design? Ammetto che ho fatto la mia parte di oggetti Singleton discutibili. Oltre a ciò, sono stato conosciuto per fare un oggetto di Dio o due per far sembrare le cose più facili.Quali anti-motivi usi anche se sai che non dovresti?

Hai mai usato un anti-pattern anche se sai che non dovresti?

+0

Sono curioso del singleton. L'uscita pigra è semplicemente per usare semplici vecchi globali, quindi perché vai nei guai extra di usare un antipattern * più * complesso? Globali potrebbero essere cattivi, ma sono generalmente meno cattivi dei singleton. E anche più facile da codificare. – jalf

+1

La mia convinzione è che Singletons sia intrinsecamente un cattivo design, sono a mio parere utilizzabili solo in rari casi di driver hardware. Nella maggior parte degli altri casi, introducono semplicemente lo stato globale nel mio ambiente OOP che danneggia gli obiettivi di qualità del progetto come la portabilità. –

+0

Continua dall'ultimo commento - Tuttavia, spesso giustifico i singleton con la seguente logica: "Ho solo bisogno di uno di questi così ne farò un singleton" anche se ciò che voglio veramente profondamente è una variabile globale. –

risposta

2

L'anti-pattern God Object è un errore facile da effettuare. A volte può sembrare troppo lavoro per rompere le lezioni. Poi a un certo punto dopo lo paghi. Ho trovato questo anti-modello va di pari passo con accoppiamento stretto.

L'anti-pattern di blocco del fornitore può anche essere difficile da evitare quando si utilizzano lingue specifiche del fornitore.

+0

Si potrebbe voler modificare quello per dire "Dio". – CTT

+0

Mi piace l'idea di un oggetto gob - tutto bocca e niente pantaloni che è complicato ma in realtà non fa molto. – Tom

+0

In realtà ho pensato che stavi usando lo slang. Peccato che tu l'abbia cambiato, avresti potuto iniziare una nuova ondata, heh. –

6

E 'molto facile cercando di fare qualcosa di flessibile, e finendo con la Inner Platform Effect . Ad esempio, sono colpevole di database interni.

E a volte è troppo allettante codificare le cose da soli piuttosto che utilizzare quella versione pre-inscatolata simile - Not Invented Here. Cerco di evitarlo, ma ...

0

Vendor Lock In

C'è sempre quella cosa specifica un unico fornitore che viene aggiunto per una parte specifica di funzionalità in quanto ha più senso che scrivere da soli. Ho passato molto tempo a prendermi a calci per questa decisione più tardi.

1

Nei commenti e penso che i warrant siano una risposta - il modello di Singleton.

È un modo per ottenere variabili globali quando un linguaggio (come Java) non lo supporta. Questo è uno di quei modelli in cui non dovresti mai usare - tranne quando ne hai bisogno. Il bit importante è essere in grado di distinguere tra quando è necessario avere una variabile globale (ci sono istanze) e quando ne vuoi una.

Ci sono problemi con i singleton al di là dei problemi seri dell'introduzione dello stato globale, in Java per esempio sono solo singoli nel caricatore di classi con caricatori di classi multiple e si possono finire copie multiple.