Classi di impostazioni flessibili e facili da usare

0

Sto pensando a un modo per creare una "classe di impostazioni" flessibile in C #. La domanda è: come fornire un modo comodo per fornire valori predefiniti alle impostazioni. Voglio che il programmatore acceda alle impostazioni predefinite il più semplice possibile usando intellisense. Pertanto ho incapsulato i valori predefiniti in una sottoclasse della classe delle impostazioni effettiva (invece di definirli direttamente nella classe delle impostazioni).

 public class ServerSettings
 {
    public ServerSettings(int port = ServerSettings.Default.Port,
                          string anotherSetting = ServerSettings.Default.AnotherSetting)
    {
        this.Port = port;
        this.AnotherSetting = anotherSetting;
    }

    public int Port { get; set; }
    public string AnotherSetting { get; set; }

    public class Default
    {
        public const int Port = 7000;
        public const string AnotherSetting = "abcd";
    }
}

Il programmatore ora può accedere ai valori predefiniti come questo:

ServerSettings.Default.Port

E dopo aver digitato ServerSettings.Default apparirà un elenco con tutte le impostazioni predefinite disponibili. È come un " multitype enum ".

Cosa ne pensi di questa soluzione? Hai qualche idea alternativa? O qualche critica?

    
posta Stefan Woehrer 30.12.2014 - 15:42
fonte

2 risposte

6

Sembra che tu stia ricreando la Gestione della configurazione classe già fornita da .NET Framework.

Una cosa che ho visto fare è fornire una classe wrapper attorno al ConfigurationManager in modo che un valore predefinito possa essere specificato nel caso in cui il parametro di configurazione richiesto non sia presente o non sia leggibile nel file di configurazione.

L'utilizzo della classe di configurazione .NET offre un paio di vantaggi come la memorizzazione nella cache delle proprietà dell'applicazione, la compatibilità con i programmi con thread e le operazioni atomiche con la lettura / scrittura sul file di configurazione.

    
risposta data 30.12.2014 - 16:46
fonte
2

What do you think of this solution? Do you have any alternative ideas? Or some criticism?

Va bene. Personalmente, avrei solo un'istanza public static readonly su ServerSettings anziché il tipo annidato. Quindi puoi passare circa ServerSettings.Default (o usarlo se qualcuno passa in null da qualche parte). Inoltre sembra essere un po 'più pulito per me.

In C #, ci sono le cose incorporate a cui le persone sono abituate, anche se penso che sia molto sopravvalutato.

Probabilmente dovresti contrassegnare questa classe come Serializable o con DataContract per chiarire che è destinata a essere utilizzata in questo modo. Vorrei anche leggere solo l'oggetto stesso. Modificare le impostazioni in fase di esecuzione è una prospettiva rischiosa che può facilmente andare male ed è difficile da riprodurre.

Tutto ciò che ho detto, ti incoraggerei a utilizzare le impostazioni raramente. Troppo spesso le persone rendono il loro codice configurabile quando non cambierà mai. È semplice, ma è anche un altro bocconcino di complessità: un'altra cosa che può andare storta. Rende il tuo codice più fragile.

Ti incoraggerei anche a interrompere le tue impostazioni. Avere un blob gigante di impostazioni è conveniente, ma è anche un percorso breve e facile per un incubo di accoppiamento. Lascia che le cose sappiano di cosa hanno bisogno di sapere e non di più, proprio come qualsiasi altro dato.

    
risposta data 30.12.2014 - 16:45
fonte

Leggi altre domande sui tag