When to sacrifice backwards compatibility?
Basically I am wondering about having this behavior in an app where the newer versions require the content created with the older version to be (automatically) converted to the newer version format, at the cost of backwards compatibility.
Visual Studio does this for its .sln
files.
Are there any pros/cons to this practice?
I guess in the context of the app I am writing (3d content creation), I was thinking of finding potentially different ways to create things in time (faster, better, more efficient) which might only be possible to implement if the older content files are converted to the new way of creating the same thing in a seeming similar way.
So for instance, maybe v1
had a Shape
class where in v2
you realized you could do this more generically and faster by using a PolySpline
class. But in order to have the old Shapes
to be PolySplines
you would convert the old content files and everything would be compatibile with 开发者_开发知识库the new version.
Is this a reasonable idea?
A factor I haven't seen mentioned is whether nearly everyone who shares data will likely be using the same version of the application. It can be very annoying, for example, if a something like a sheet-music editing program saves in a format that is unreadable by earlier versions, since people who wish to exchange sheet music may very well not be running the same version of software. On the other hand, if a database will only be accessed by users within a small shop, plan on just doing a simultaneous upgrade of everyone and be done with it.
Unless you have a huge installation base and draconian upgrade policies/costs (like Microsoft with it's Office), you should have no problems with users needing to open new version files on older version of software. In other words, people frequently upgrade, but rarely downgrade.
One thing you can foresee and consider now is to create (a) some free player to let users that have new format file and old version of software see this new file (and maybe decide to upgrade) and (b) converter module that will convert newer format to older possibly dropping some unsupported features/elements.
精彩评论