Where is best place to define hard coded values?

  • Thread starter Thread starter Brett
  • Start date Start date
B

Brett

If I have many hard coded values such as file paths, file names, timeouts,
etc, where is the best place to define them? Meaning, in the case something
needs changing for example, rather than running down all the subs or
functions that may contain these values, I'd like one place to change them
and have that changed reflected in the subs or functions that use those
values. I'd like to avoid globals; keeping the values private to only those
subs or functions using them.

Thanks,
Brett
 
Hi,

I would make a variable that is private to the class or form.
That way all the sub routines and functions can use it. It wont be
accessable out side the form or class.

Ken
-----------
If I have many hard coded values such as file paths, file names, timeouts,
etc, where is the best place to define them? Meaning, in the case something
needs changing for example, rather than running down all the subs or
functions that may contain these values, I'd like one place to change them
and have that changed reflected in the subs or functions that use those
values. I'd like to avoid globals; keeping the values private to only those
subs or functions using them.

Thanks,
Brett
 
There will be some shared variables mixed in. Meaning, I'll define
variables in one class that will also be used in other classes or forms.
For those shared variables, should I just create a class that only houses
them? This provides one place to change them and have those changes cascade
through out forms/classes that are using them.

Brett
 
Brett said:
If I have many hard coded values such as file paths, file names, timeouts,
etc, where is the best place to define them? Meaning, in the case something
needs changing for example, rather than running down all the subs or
functions that may contain these values, I'd like one place to change them
and have that changed reflected in the subs or functions that use those
values. I'd like to avoid globals; keeping the values private to only those
subs or functions using them.

Thanks,
Brett

In situations like this - what do you think of including the file paths,
file names, timeouts, and those hard-code values in a separate text file you
can read at run-time.
The program would not need to be modified when things change - just change
the values in the file.
 
Hal Rosser said:
In situations like this - what do you think of including the file paths,
file names, timeouts, and those hard-code values in a separate text file
you
can read at run-time.
The program would not need to be modified when things change - just change
the values in the file.

Is this how it is normally done?

This file would only need to be read the first time the program loads
correct? It will also only be for globals right?

Thanks,
Brett
 
Brett said:
Is this how it is normally done?

This file would only need to be read the first time the program loads
correct? It will also only be for globals right?

Thanks,
Brett


Can be used for anything that has to be hard-coded.
Some do something like this - for Sales Tax Rate and the like
- If the rate changes - someone can change the rate in the file - and no
re-programming is required for a change in rates.
A separate file for each piece of data is one way to do it -
frinstance a file named "stateTaxRate.dat" can have one entry like ".075".
When the state changes the rate - tell the user to change the file entry to
".085" - or whatever the new rate is.
 
Hal Rosser said:
Can be used for anything that has to be hard-coded.
Some do something like this - for Sales Tax Rate and the like
- If the rate changes - someone can change the rate in the file - and no
re-programming is required for a change in rates.
A separate file for each piece of data is one way to do it -
frinstance a file named "stateTaxRate.dat" can have one entry like ".075".
When the state changes the rate - tell the user to change the file entry
to
".085" - or whatever the new rate is.
I see. I suppose you could build that into the interface for the user to
make changes as well right?

Using the text files for many variables, will that be a bunch of parsing -
instr(), mid(), perhaps regular expressions and the like in other words?
They just don't seem like the most efficient method. I guess they could be
seperated by chr(13) & chr(10).

Would an XML file work better?

Thanks,
Brett
 
Options may be: XML Resource File, Small DataBase, Serialized Class, etc.
 
I'm surprised no-one here has mentioned App.config yet (or did I miss it?)

Right click on your project in the solution explorer and choose to add a new
item. From the list of items that you can add to the project, scroll down
and find the one called ApplicationConfiguration File. Select it, call it
app.config and click Open to add it to the file.

In the file you just added, drop in an <appSettings> section and in that add
your values, like this
<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<appSettings>

<add key="DirectoryName" value="c:\test"/>

</appSettings>

</configuration>

Here I've addded in a single entry called DirectoryName, with a value of
"c:\test"

Now, to get at that, and obviously the whole mass of other values you want
to store, just go ahead and create a class with some shared properties on
it, like this.

Imports System.Configuration

Public Class AppSettings

Public Shared ReadOnly Property DirectoryName() As String

Get

Return ConfigurationSettings.AppSettings("DirectoryName")

End Get

End Property

End Class

If I ever want to pull a value out of that app.settings file now I just call
AppSettings.whateverpropertyyoucoded up

Hope that helps,
 
Pete,
Depending on the nature of the (original) coded values, I would consider
creating custom a configuration section in the app.config rather then
directly in appSettings, as this allows better encapsulation of the coded
values...

Create a custom configuration section via configSections and implementing
the System.Configuration.IConfigurationSectionHandler. I would pattern the
custom section handler after DictionarySectionHandler (support: add, remove,
clear) or use a class derived from DictionarySectionHandler...

<navigation>
<add form="Form 1" type="namespace.form1, assembly" />
<add form="Form 2" type="namespace.form2, assembly" />
</navigation>

Then within your code you can use ConfigurationSettings.GetConfig to return
the above section of the app.config. Depending on what you do in your
IConfigurationSectionHandler.Create method (I would create a HashTable) will
decide what GetConfig returns.

See the following on how to create new sections via the configSections
section.

http://msdn.microsoft.com/library/d...de/html/cpconconfigurationsectionhandlers.asp

and:
http://msdn.microsoft.com/library/d...ref/html/gngrfconfigurationsectionsschema.asp

Also read about the System.Configuration.ConfigurationSettings class and
other classes in the System.Configuration namespace.


Hope this helps
Jay
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top