d at davea
Jun 11, 2012, 2:01 PM
Post #3 of 4
On 06/11/2012 02:37 PM, Dennis Carachiola wrote:
Re: Where to set default data - where received, or where used
[In reply to]
> I'm programming a project which will use a file to save parameters
> needed by the program. There are already two previous file formats,
> each of which can only be run by the version of the program which
> created them. I'm trying to avoid that problem in the future. To do
> that, I intend to use a dictionary, and default data. I believe that
> most new versions will add parameters.
> Each version of the program will have reasonable default values for
> each key in the dictionary handled by that version. If an older file
> is used, the data values in that file replace the keys that exist.
> The program then can operate on the values supplied by the older data
> file and the default values. Conversely, if a newer file is used, the
> data in the file replaces the keys in the dictionary. The program
> then simply doesn't access the newer data values. I'm hoping that
> this will make the file backward and forward compatible.
> Here's my question. I could do this by creating the dictionary with
> the default values, then read the file into it. Or I could use a
> 'get' with default values at the location in the program where those
> values are used.
> >From what I can see, creating the dictionary with default values puts
> everything in one place. While, supplying the default values at the
> place where they're used places the default values nearest the place
> where actually used.
> I can't decide on one way over the other. Can anyone give me some
> ideas if one is a preferred method, or other criteria I've overlooked?
i would do it at the point of input. In fact, one option might be to
save an updated version of the file, with the missing fields filled in.
By doing it all in one place, you can test whether the code works with
each external variant you intend to support, and gives you one place to
fix whatever incompatibilities you find.
You very well might discover you need a fancier algorithm than just
having default values. For example, you might fill in missing values
with a computation based on the values you do have. Further, if it gets
really messy, you might end up with multiple input funcitons, keyed on
the type (version) of the file. The point is, none of the other code
should care one iota.
I certainly hope the version information for those existing files is