E 'una buona idea avere variabili statiche predefinite per nuove istanze?

1

OK diciamo che ho qualcosa del genere:

public class MyObject {

    public static int DefaultValue = 9

    private int _value = DefaultValue;
    public int Value { get { return _value; } set { _value = value; } }

}

In questo modo, la modifica del valore predefinito cambierà il valore per tutte le istanze future, quindi avere un valore predefinito costante non è la stessa cosa.

Questa è una pratica o schema di programmazione noto?

    
posta Supreme Grand Ruler 30.04.2016 - 03:59
fonte

2 risposte

5

Sono sicuro che ci sono situazioni in cui ciò avrebbe senso, specialmente se stai scrivendo una piccola applicazione, ma in generale penso che sarebbe una cattiva idea.

Potresti applicare qualsiasi argomento che potresti fare su variabili globali a variabili statiche - sono ancora modificabili ovunque nell'applicazione.

Se la tua applicazione (e il tuo team di sviluppo) è sufficientemente grande, potresti facilmente fare in modo che un altro sviluppatore accidentalmente aggiorni il valore predefinito senza conoscerne le conseguenze.

Se avevi bisogno di creare gli oggetti utilizzando valori predefiniti diversi, potresti trarre ispirazione dal Pattern di fabbrica , e avere il codice per specificare i valori predefiniti all'interno della classe factory in modo che possano essere utilizzati valori di default diversi per istanza. Potresti quindi ottenere la distanza e rendere immutabili le istanze di fabbrica in modo da dover riassegnare intenzionalmente i riferimenti ad esso ovunque desideri utilizzare il nuovo valore predefinito.

Anche se penso che potrei suggerire un'eccessiva ingegnerizzazione qui.

    
risposta data 30.04.2016 - 04:30
fonte
3

Questa non è una buona idea perché puoi introdurre una condizione di gara.

In un thread si modifica il valore in uno che si desidera ma prima di riuscire a creare un'istanza della classe un altro thread modifica il valore e si ottiene un'istanza creata con il valore predefinito errato.

I tuoi capelli cresceranno più bianchi dei miei, cercando di capire perché le cose non funzionano come dovrebbe.

Secondo me questo non è un anti-pattern né un odore. È semplicemente sbagliato.

    
risposta data 30.04.2016 - 12:57
fonte