2009-06-15 9 views
6

Ho recentemente iniziato a fare qualche programmazione di ActionScript/Flex e sono ... Sorpreso ... Per il numero di singleton che vedo. Loro sono ovunque! La libreria standard, i framework ... diamine, ho persino letto un post sul blog stamattina in cui l'autore ha detto che ha refactored alcune delle sue classi INTO singleton!Perché i singleton pervadono la cultura di ActionScript?

Esiste una spiegazione ragionevole del motivo per cui la comunità AS ama così tanto i singleton?

risposta

5

Non è solo la comunità AS, è una tendenza generale nella progettazione del software. La programmazione orientata ai componenti incoraggia la configurazione iniziale e il cablaggio degli oggetti di servizio, che quindi collaborano utilizzando i messaggi transitori. I singleton sono una parte naturale di questa idea.

Anche i singleton riducono l'impatto in fase di esecuzione degli oggetti costosi da creare.

+1

Trovo ironico perché, per me, usare estensivamente i singleton sembra utilizzare un linguaggio di programmazione funzionale. – Kai

+0

Bene, non ci sono confini tagliati e secchi tra queste tecniche. La buona pratica si evolve per prendere in prestito i pezzi migliori da tutti loro. – skaffman

+5

@Kai: Davvero? Perché?Per me sembra esattamente il contrario: i singletons promuovono lo stato globale (quindi scoraggiano l'idempotenza), mentre i linguaggi funzionali incoraggiano pure funzioni (che scoraggiano fortemente lo stato globale/incoraggiano l'idempotenza). –

3

Non sono sicuro di dove tutto provenga, Flex ne è pieno e, come dici tu, li vediamo in molti altri posti. All'inizio sono attraenti, ma quasi sempre portano a un mal di testa da qualche parte lungo la strada.

Ognuno dovrebbe leggere il blog di Miško Hevery (start with this one). Fa alcuni eccellenti argomenti contro il loro utilizzo.

Singleton's have there use, un Logger, ad esempio, ma sono troppo usati.

@skaffman Per quanto riguarda i vantaggi in termini di prestazioni, è perfettamente ragionevole disporre di una singola istanza di un oggetto nell'applicazione senza implementare un modello Singleton.

+0

Singletons non richiede l'uso del modello di progettazione di Singleton.In realtà, il modello (come specificato nel libro GoF) è piuttosto sgradevole e crudo.Meglio applicare i singleton attraverso il framework dell'applicazione – skaffman

+0

Articolo fantastico, grazie per il collegamento! – Soviut

5

Penso che provenga dal vecchio modo in cui Flash funzionava ... In quei tempi non c'erano molti programmatori pesanti che facevano flash, solo alcuni, ed erano considerati dei prodigi (e giustamente). La maggior parte delle persone erano persone trasferite dall'industria della stampa ... pensavano che Flash fosse il nuovo Illustrator per il webz.

ai vecchi tempi sviluppatori Flash usato il facile da usare 'tellTarget' per arrivare a una certa MovieClip che potrebbe essere nidificato all'interno di un clip filmato all'interno di un clip filmato all'interno ... ecc E 'semplicemente stato il modo in cui è stato fatto ... quelle persone (incluso me) non hanno mai avuto alcun background software, quindi abbiamo vissuto in questo mondo visivo e Flash stava pensando al modo in cui i designer pensavano. In AS2 molte persone (quelli che erano e quelli che non erano bravi nella codifica) avevano anche molti problemi a perdere "scope" all'interno delle classi ... Ricordo la classe Proxy che ci aiutava a non perdere lo scope in una classe . Un sacco di mal di testa in questi giorni. Le persone che hanno gradualmente aggiornato la loro saggezza di codice non hanno mai messo completamente le loro teste attorno ai nuovi modi di codifica in OOP ... alcuni di loro pensano che un Singleton possa essere usato come una specie di " globale". Possono sempre parlare con questo ' globale' da qualsiasi punto della loro applicazione.

penso che sia così semplice ...

-1

Da allora ho cambiato la mia posizione in proposito.

L'utilizzo di oggetti in actionscript3 ha servito bene per aumentare la modulabilità.

Vorrei speculare che, come me, i vantaggi di OOP sono consensi e difficili da trovare per la maggior parte degli sviluppatori flash principianti.

Penso che ci siano davvero due ragioni per questo.

1.) parlare delle nozioni di base è noioso, quindi la maggior parte delle informazioni è così complicata. OOP sta davvero rompendo un sistema in parti riutilizzabili comprensibili.

2.) la programmazione procedurale è simile al flusso di lavoro, che si blocca in un certo flusso di lavoro, ma per begining programmatori che lo rende più facile da comprendere

3.) Un sacco di flash è su come gestire lo stato di il widget flash, quindi ha un certo livello di senso per gestire le informazioni in un unico punto centrale.

---------------- ---------------- risposta originale

faccio parte di quella comunità AS che ama (e usa) singoletti.

Sono relativamente nuovo alla programmazione (3 anni di PHP/MySQL/Javascript/Actionscript proffesionally).

Penso che esista una chiara distinzione tra la programmazione modulare e l'ereditarietà classica basata sulla classe OOP.

Programmazione modulare, che da quello che capisco è una parte importante di OOP, è una parte estremamente importante della progettazione del programma efficace.

Qualsiasi cosa utilizzata più di una volta può essere spostata in una funzione separata. Gruppi di operazioni che condividono funzionalità o attributi simili possono essere separati nelle loro parti comuni e quindi le diverse parti si uniscono alla loro istanza.

Tuttavia, ritengo più efficace per fare questo con una collezione di moduli interconnessi

A mio parere la maggior parte della programmazione orientata agli oggetti di base ereditarietà è solo aria calda. I moduli che interagiscono tra loro è un modo molto più efficace per modellare le attività di un programma che 15 versioni di fondamentalmente la stessa cosa.

Faccio un core e creo moduli per l'atatch nel core, ma non ho mai il sub-object come un'estensione del core. Penso che estendere una classe sia ingombrante e stagnare lo sviluppo eliminando la necessaria flessibilità da esso.

Uno dei motivi per cui ho spesso letto (e ascoltato l'OOP basato sull'ereditarietà) è che aumenta la leggibilità e la sostenibilità. Per me tutto questo significa che i programmatori preferirebbero utilizzare un sistema che sia facile per loro rispetto a un sistema efficace per il programma.

Io sono tutto per scrivere il codice più chiaro e comprensibile possibile ma solo fino e non oltre il punto in cui inibisce la creatività e la flessibilità di un programma.

Sono per OOP ma preferisco un singolo, un prototipo o un aggiornamento basato su modulo.

+0

In effetti, il modello di ereditarietà impone anche la sicurezza del tipo: questo è un grosso problema se stai facendo un gioco in cui a Tutti gli oggetti di gioco derivano da un singolo oggetto, tutti gli oggetti distruttibili ereditano l'interfaccia distruttibile, ecc. L'ereditarietà non riguarda solo le sostituzioni. – Soviut

+0

Tt suona ancora come sparare una mosca con una palla di cannone per me, gli oggetti dovrebbero essere più organizzati che in un grande secchio. Assegna i distruttori per ogni gruppo o crea un modulo distruttore separato come un oggetto globale e fai in modo che tutti gli oggetti parlino con quello. Il gioco che descrivi sembra non divertente, perché i migliori giochi sono quelli con varietà. –

+0

Per curiosità, esegui unità o qualsiasi altra forma di test automatico sul tuo codice? –

3

Per i punti eccellenti che sono già stati fatti qui, vorrei aggiungere che c'è qualcosa riguardo l'alta velocità in cui i progetti Flash sono messi insieme e il fatto che la maggior parte non avrà bisogno di essere mantenuta, che incoraggia le persone a fare le cose il più rapidamente possibile, e Singletons sono un buon modo per farlo, e puoi usare getInstance piuttosto che aggirare i riferimenti, l'iniezione di dipendenza, ecc. In pratica, il fatto è che ne avrai solo uno esempio di molte delle tue classi, anche se in teoria potresti volerne più di una.

Problemi correlati