IOC e servizi stateless. Breve durata o singola istanza?

7

Dato un framework garbage-collected, quando si usa un container IOC per iniettare servizi puramente stateless, è generalmente meglio usare la durata della vita a singola istanza del contenitore o ricreare l'oggetto ogni volta che viene usato e lanciarlo, e tutti i suoi dipendenze, via non appena hai finito con loro?

    
posta pdr 07.12.2012 - 18:14
fonte

3 risposte

5

Hai detto che il tuo servizio ha delle dipendenze.

Se una qualsiasi dipendenza nel tuo grafo di dipendenze non è completamente priva di stato, o se una delle tue dipendenze nel tuo grafico delle dipendenze dovrebbe essere modificata per non essere più completamente priva di stato, allora l'intero sistema fallirà. E gli errori che otterrai saranno probabilmente molto criptici, rendendo così difficile scoprire il problema.

Supponiamo che tu sia un team di sviluppatori che lavorano al progetto. È altamente improbabile che ognuno di loro sia consapevole del fatto che la configurazione IOC richiede che tutti questi componenti rimangano completamente privi di stato. Potrebbero saperlo ora, ma quella consapevolezza svanirà nel tempo. E se assumi un nuovo ragazzo, anche lui / lei non sarà a conoscenza.

Quindi definisco definitivamente il contenitore IOC per restituire una nuova istanza ogni volta. È semplicemente la scelta più sicura, imho.

Non mi preoccuperei certamente delle risorse. Il costo di costruzione e raccolta dei rifiuti di oggetti è probabilmente insignificante rispetto ad es. solo una singola ricerca nel database.

    
risposta data 15.01.2013 - 18:00
fonte
3

La singola istanza era il comportamento predefinito di Spring per un motivo: una singola istanza di un servizio stateless sta consumando meno risorse che la costante creazione e la garbage collection di molte istanze. Inoltre, non vi è alcun pericolo reale nella condivisione di un servizio stateless, ma ci sono alcuni problemi di scalabilità reale con la creazione di più istanze di un servizio.

Quindi, direi che la singola istanza sarà probabilmente tua amica.

    
risposta data 07.12.2012 - 21:16
fonte
0

Senza ulteriore contesto, penso che non abbia molta importanza.

Puoi ottenere i benefici di oggetti di breve durata da una singola istanza, se quell'istanza crea semplicemente gli oggetti a vita breve per ogni chiamata, e puoi ottenere i benefici di una singola istanza da molti oggetti di breve durata, se quelli si comportano semplicemente come pesi volanti .

Ovviamente è inutilmente rumoroso impostarlo in un modo, solo per delegare al contrario. Quindi suppongo che dovresti solo avere un'ipotesi, se è probabile che tu aggiunga lo stato a tutti e, in caso affermativo, se sarà permanente / globale (ad es. Quando aggiungi una cache) o di breve durata / stato locale.

    
risposta data 07.12.2012 - 19:14
fonte

Leggi altre domande sui tag