Ecco la domanda prima:Generazione automatica di un'AppSettings fortemente tipizzato classe
è possibile? Mi sto ispirando a Joe Wrobel's work (un richiamo del dimenticato Codeplex project). Qui, tu fai il tuo lavoro sulla creazione del tuo profilo per il provider, e fa il gioco di parole per creare una forte tipizzazione, creando in modo efficace una facciata per la classe Profile.
E ora la storia precedente!
Davvero non mi piace magic strings. Sono piuttosto cattivi e possono causare seri problemi quando si tratta di aggiornare la tua applicazione. Avendo lavorato in linguaggi come PHP e ColdFusion, so che è facile inserirli nella tua applicazione e dimenticarli finché non ne hai bisogno. E poi devi cacciare ogni variazione di loro e modificarli di conseguenza.
. NET non è molto meglio se si seguono i modelli di applicazione 'out of the box'. Un sacco di esempi là fuori usano le impostazioni dell'app in web.config per memorizzare varie impostazioni. Questo è davvero un bel posto dove riporre ed è perfetto per la maggior parte delle applicazioni. Tuttavia, i problemi cominciano a sorgere quando si inizia a chiamarli direttamente, ad esempio ConfigurationManager.AppSettings["MyAppSetting"]
. Allora non sei molto più bravo di un utente di PHP quando torni ad usare le stringhe magiche.
Questo è il punto in cui entra facades. Le facciate offrono un modo di creare un oggetto fortemente tipizzato da una stringa magica in un unico punto, e facendo riferimento allo sviluppatore dal resto dell'applicazione.
Ora, invece di utilizzare un web.config per contenere le mie app, utilizzo un database per conservarle tutte. All'avvio dell'applicazione, le combinazioni nome/valore vengono recuperate e quindi aggiunte in sequenza allo ConfigurationManager.AppSettings
tramite Set
. No biggie (a parte lo problem avevo in precedenza!).
Questa 'facciata dell'applicazione' è accessibile dal livello dati, livello servizio e livello presentazione e contiene elementi come la modalità applicazione, che l'endpoint del servizio utilizza yada yada yada e limita la necessità di dover cercare per molte stringhe magiche, fino a due corde magiche - una (il nome) nella facciata e l'altra (il nome e il valore) nel punto di creazione (che, per me è il db).
Questa classe di facciata alla fine diventerà piuttosto grande e alla fine mi stancherò di dover aggiornare entrambi.
Quindi quello che mi piacerebbe fare è avere una classe ApplicationFacade che si auto-genera ogni volta che viene eseguita una compilazione. E ora di nuovo all'inizio ... È possibile?
Questa è un'idea interessante, ma non sono un grande fan di CodeSmith per essere onesto. Alla fine, scrissi una mia classe che era necessaria in ogni caso, perché non c'era modo per la mia applicazione di dedurre che tipo erano le mie appsettings. –
Ho aggiunto un po 'di codice al mio post. Spero che possa aiutarti. – Cheburek
Questa è una soluzione davvero interessante! Una cosa che sembrava avere problemi con (e questo è VBs IsNumeric) è "0,5,0" che VB crede sia un valore numerico, anche se non sono sicuro di come! –