2011-08-23 25 views
5

Ho un'applicazione che ha alcune classi che gestiscono alcune funzioni specifiche, hanno una durata pari all'applicazione stessa e sono pensate per essere utilizzate in molte parti del programma. Per quest'ultimo motivo li chiamo Servizi. Ad esempio, il servizio audio riproduce file audio e fa molte altre cose relative all'audio.classi singleton/statiche per servizi

Queste classi vengono istanziate una sola volta all'avvio delle applicazioni e non ha senso avere più di una per tipo.

Da quando ho letto molte risposte su singleton qui su SO, dove il loro utilizzo è scoraggiato, ho continuato passando un riferimento a questi servizi quando necessario. Mentre il progetto sta crescendo mi trovo con molte classi che hanno bisogno di un riferimento di servizio sul loro costruttore e in alcuni casi anche una facciata di quei servizi per evitare di aggiungere tutti i riferimenti ai servizi.

Penso che sto sbagliando. Penso che questo dovrebbe essere un buon uso per le classi statico/singleton.

È un approccio corretto?

risposta

1

Vedo che una risposta suggerisce di introdurre Spring. Sotto le coperte, Spring sta ancora passando quel riferimento intorno a dove è necessario.

Piuttosto che introdurre un nuovo framework nell'app, perché non usare solo un Singleton? Se fa il lavoro ed è più facile da gestire che passare un riferimento di servizio in giro, dico di usarlo.

Se la vostra preoccupazione per Singletons è dovuta al loro impatto sulla testabilità, utilizzare Dependency Injection (il modello, non un framework) per ridurre l'accoppiamento a un'implementazione.

2

Sembra che tu abbia bisogno di un contenitore per l'iniezione delle dipendenze con alcune funzionalità di autowiring. Ad esempio, se stai usando Java, prendi in considerazione Spring.

0

Singleton indica gli oggetti che devono essere creati solo una volta sola durante il ciclo di vita dell'applicazione. Questi oggetti contengono in realtà alcune delle impostazioni fisse. Diciamo che hai una classe di parser che è per analizzare solo il codice HTML. La radice di HTML dovrebbe essere "" tag. Inoltre, non si desidera creare un sacco di istanze da questa classe parser perché ogni istanza di classe farà la stessa cosa. L'istanza otterrà una stringa di html e ti restituirà X. Se pensi che le tue classi faranno solo una cosa alla volta, puoi andare per singleton. Tuttavia, se dici che, ad esempio, il tuo servizio audio dovrebbe riprodurre diversi audio alla volta, credo che creare istanze di una classe sia meglio che renderlo singleton.

0

Sono d'accordo con MikeG. Usa un singleton. Dal momento che tu dici che queste classi sono per lo più orientate al servizio, non mi aspetterei che causasse problemi.

Problemi correlati