Impostazioni dell'applicazione, stato e altro come Singleton? [duplicare]

4

Sono relativamente nuovo alla programmazione (esperienza sul campo 1yr ora) e penso di esagerare con lo schema del singleton e ho bisogno di qualche input su come farlo in un modo migliore. In questo momento sto usando i singleton come scusa per i dati globali statici. Io uso singleton per Application Status, Application Settings e anche molto per "Managers". Fondamentalmente sono tutti gli oggetti che sono necessari da diverse parti della mia applicazione. Penso che questo modello renda più semplice creare un oggetto e iniettarlo in tutte le parti che ne hanno bisogno.

Qualche svantaggio di questo approccio? Qualche suggerimento su questo argomento?

    
posta metacircle 18.03.2013 - 07:11
fonte

2 risposte

1

Sembra un tipico caso di abuso di Singleton. È davvero facile non pensare a separare correttamente le responsabilità, è molto più semplice attaccare tutto ai dati globali. Questo è esattamente il motivo per cui Singleton ha una cattiva reputazione, consente di dare un nome interessante alle cattive pratiche.

È difficile dare consigli esatti senza sapere di più sulla tua applicazione. Si cita lo stato dell'applicazione e le impostazioni. Dalla mia esperienza questi sono di solito un miscuglio di dati vari che non sono correlati tra loro. Se questo è il caso, quindi iniettare il grande stato / ecc. classe per ogni altra classe non è un gran miglioramento rispetto a Singleton. Quello che devi fare è distruggere la grande classe. A seconda di quanto è grande il tuo codice base, questo può essere davvero difficile, perché i dati globali possono far dipendere tutto da tutto.

    
risposta data 18.03.2013 - 08:33
fonte
0

Nell'implementare la logica per un singleton, renderai più difficile testare la tua applicazione con valori diversi.

Ti suggerisco di creare una singola istanza della tua classe delle impostazioni, ma piuttosto che renderla accessibile a livello globale, puoi utilizzare dependency injection per fornire un riferimento a ciascuna delle tue classi.

In termini di stato globale, questo potrebbe essere usato ancora con DI come da mio suggerimento sopra tuttavia suggerirei che lo stato dell'applicazione non deve essere globale. Vorrei riesaminare il tuo design e provare a disaccoppiare la necessità che le classi conoscano lo stato globale. Quello che ritengo sarebbe un'alternativa migliore è che tu abbia Fabbriche dove necessario che siano iniettate con le tue impostazioni e costruisci i tuoi oggetti per te.

    
risposta data 18.03.2013 - 09:38
fonte

Leggi altre domande sui tag