Version Numbers, Conversion, and Emulation

If you ever plan to release a new version of your application, which more or less all of us do, you will want to use version numbers with all instances of data that might be stored persistently, such as a content object's native data streams. A later version of your server might be asked to load and edit an old version of a content object through conversion and emulation if your object is registered for such use.

In designing a server, you should think about what other data formats your server might support besides its own. This includes not only old versions of your application but also your competitors' similar applications.1 You'll need to decide which formats you want to read but write back in your own format. These are the types you can convert. Then you'll need to find the formats that you can both read and write, the types you can emulate. Your object's implementation of IPersistStorage is responsible for handling the differences among whatever storage formats you support. If you're dealing with competitive sources, you'll have to obtain information about their data formats. The nice thing is that those competitors will want your formats as well, and it is a benefit to all users that your servers are cross-compatible.