Domanda

Sto scrivendo un'applicazione # C che utilizza una lunga stringa "hard-coded".

Per motivi di manutenibilità ho deciso di mettere questa stringa in un file di testo esterno e caricarlo. E 'questa una buona idea? Il I extra / O non sembra grande in questo caso.

mi rendo conto che ho anche la possibilità di incorporare questo file come risorsa resx. Si tratta di un'idea migliore? Il file sarà mai bisogno di essere localizzato.

È stato utile?

Soluzione

Se avete intenzione di consentire agli utenti / amministratori di modificare la stringa, sono d'accordo con le altre risposte, e io suggerirei di metterlo nelle impostazioni.

Se non si vuole che sia modificabile dopo la distribuzione e saranno modificati solo da voi e ai vostri sviluppatori, quindi vorrei metterlo in una risorsa incorporata (nota, questo non è lo stesso di un file resx) . Si potrebbe leggere in fase di esecuzione in questo modo:

Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream(“MyAssemblyNamespace.MyTextFile.txt”);
StreamReader reader = new StreamReader(stream);
string theText = streamReader.ReadToEnd();

Aggiornamento: Questa è la soluzione che è facile da mantenere. Il file .txt sarà solo un altro file nella soluzione esploratore in Visual Studio ed è possibile modificarlo come qualsiasi altro file, tenerlo sotto controllo del codice sorgente come qualsiasi altro file, ecc per trasformarlo in una risorsa incorporata cambiando Build Azione nella finestra delle proprietà di "embedded risorse".

Il risultato finale è che il file (s) ottenere incorporato nella DLL in modo da avere solo 1 DLL da distribuire al posto di una DLL e una cartella di file che devono muoversi insieme.

Aggiornamento 2: Per quanto riguarda "il debug di produzione", questa è una soluzione molto statico, e quindi non sarà in grado di modificare il contenuto del file di testo in fase di runtime perché il file è cotto in la DLL in fase di compilazione. Per leggere il contenuto del file, è possibile utilizzare strumenti come riflettore per visualizzare l'incorporato risorse di una DLL. Si potrebbe anche scrivere un semplice strumento a riga di comando che scarica tutti i file incorporati .txt da una DLL in singoli file per voi a guardare.

Per l'utilizzo della memoria, non c'è una soluzione più efficiente che "lo carico da un file in memoria solo esattamente quando è necessario". Dovete decidere se il miglioramento della manutenzione e la distribuzione vale il costo di un po 'di memoria in più quando la DLL viene caricata in memoria per la vostra situazione specifica. Detto questo, non hai detto quanto grande questi file sono. Se sono davvero enormi (megabyte +), probabilmente non utilizzare questa soluzione e sarebbe andato con i file sciolti sul disco rigido. Se sono in genere piuttosto piccole (centinaia di kilobyte), io non mi preoccuperei della memoria aggiuntiva se non si è in un certo tipo di situazione in cui dispositivo embedded RAM è davvero stretto.

Altri suggerimenti

Perché non farne un appSetting nel web file / app.config?

<appSettings>
   <add key="MyLongString" value="This is a really long string value that I don't want hardcoded" />
</appSettings>

Poi, nel codice:

using System.Configuration;    //To ease your typing pains

var myReallyLongString = ConfigurationManager.AppSettings["MyLongString"];

Vorrei suggerire di utilizzare Impostazioni applicazione.

È possibile seguire questo link come utilizzare Application e impostazioni utente .

Vorrei mettere questo in un href="http://msdn.microsoft.com/en-us/library/ms229689(vs.71).aspx" rel="nofollow file di configurazione di applicazione .

Ancora meglio sarebbe quella di aggiungere il file al progetto a Impostazioni. È quindi possibile aggiungere facilmente le impostazioni di configurazione tramite Visual Studio. Vedere questo link .

È quindi possibile accedere alla stringa utilizzando il seguente:

Settings.Default.MyString;

Inoltre, le impostazioni sono fortemente tipizzati, quindi non c'è bisogno di fare alcuna conversione quando li si recuperano.

Per rispondere più direttamente alla tua domanda, la "best practice" sarebbe quella di utilizzare un file di risorse per qualsiasi localizzabile (anche se non avete intenzione di localizzarlo) stringa nell'applicazione. In questo modo è in fase di compilazione accesso alla stringa e le impedisce di essere esternato in un file separato da distribuire con l'applicazione.

Io suggerisco di usare questo approccio; impostazioni sono simili, ma non devono essere utilizzati a meno che quello che stai memorizzazione c'è in realtà rappresenta un ambiente. Le costanti sono l'altra opzione, ma nel caso di una lunga serie, mi piacerebbe stare lontano da loro, solo per il gusto di manutenibilità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top