2010-08-25 8 views
0

Ceci est mon app.config:Y a-t-il une différence entre le chargement d'une valeur depuis le fichier app.config et son chargement depuis un objet?

<appSettings> 
    <add key="PreRootFolder" value="D:\" /> 
    <add key="RootFolder" value="webSite" /> 
    <add key="Folder" value="folder_a" />   
</appSettings> 

Depuis que je préfère construire le chemin dans l'application plutôt que d'avoir plusieurs clés pour chaque partie du chemin ... (difficile à maintenir) donc je construire le chemin de cette façon:

string prePath = ConfigurationManager.AppSettings["PreRootFolder"]; 
string rootFolder = ConfigurationManager.AppSettings["RootFolder"]; 
string folder= ConfigurationManager.AppSettings["Folder"]; 

// global param (actually accessed by ((MainFormName)mainParent)).g_fullOriginalRoot   
string g_fullOriginalRoot = prePath + "\\" + rootFolder + "\\" + fodler; 

Je le fais dans l'application MDI formulaire parent (il ne mourra jamais)

Je l'ai fait parce que je trouve que j'appelle les clés plusieurs fois et maintenant je peux obtenir les données du parent.

Je me demande si ma solution est correcte?

Les paramètres app.config sont-ils chargés en tant que globaux?

Répondre

2

Il est raisonnable d'utiliser un objet globalement accessible (statique ou singleton) qui mémorise les paramètres dans ce cas.

La plupart des inconvénients des variables globales sont moins graves lorsque la communication est unidirectionnelle (les paramètres en lecture seule ou la journalisation en écriture seule étant des cas classiques). De plus, comme les paramètres sont intrinsèquement globaux, ils correspondent à ce qui est en train d'être modélisé.

Je préférerais avoir cela fait dans sa propre classe que dans la forme MDI cependant. Le formulaire devrait modéliser les choses qui ont à voir avec le formulaire, les autres objets devraient modéliser d'autres préoccupations.

+0

Je travaille avec des fichiers et les clés que j'ai sont la partie des chemins: key1 = "C: \ source", key2 = "D: \ target" key3 = "voie relative" ... les mêmes clés pour toutes les formes, qui sont très susceptibles d'être utilisées, valent le risque d'être initiées (et potentiellement de ne pas être utilisées) et cela semble également être un travail redondant pour le faire dans toutes les classes. Est-ce que ma logique a un sens? – Asaf

+0

Oui. Thouch "C: \ source" n'a rien à voir avec une fenêtre, donc je l'ai mis dans une classe non-formulaire. Il peut également être mémorisé, où l'obtention d'une propriété donnée charge cette information lors de la première utilisation. –

1

Une autre chose à prendre en compte est la possibilité de modifier cette valeur pendant que l'application est en cours d'exécution. Voulez-vous autoriser l'utilisateur à modifier la valeur et demander à l'application de récupérer la nouvelle valeur ou est-ce suffisant pour que l'application charge la valeur au démarrage, puis supposez que la valeur ne change jamais pendant l'exécution de l'application.

Cette considération est, bien sûr, plus importante pour une application à exécution longue que pour des applications à courte session.

+0

Si cela peut changer pendant qu'une application est en cours d'exécution, sans forcer l'application à redémarrer, ce n'est pas un paramètre. –