views:

55

answers:

1

I oftem run into this case of what is the correct way to store a list of objects as a property in a class and how to properly serialize them into XML.

For instance, we have a TabGroup class which will contain zero or multiple Tabs.

Is it better to a have a list of Tabs property or a list of references to Tabs? Provided that Tabs are identified by slugs which are unique.

List<Tab>

List<string>

In the end it comes down to

  1. Serializing only the whole TabGroup graph (which will contain all its Tabs and their content)
  2. Serializing Tabgroups and Tabs indenpendently and maintaing them separate and referenced through list of slugs in the serialized Tabgroup graph.

Most notable pro of 1:

  • Tabgroup in its entirety is persisted in one serialized file, keeping the datastore structure simple.

Most notable con of 1:

  • each time an update is made to one of the contained Tabs, Tabgroup must be updated (reserialized) too.

Most notable pro of 2:

  • updating tabs does not require reserialization of Tabgroup (at least when nothing was added or removed) since the references stay the same; so only the updated Tab has to be serialized again.

Most notable con of 2 (this is the main reason why I am writing this)

  • individual Tab files can be deleted in filestore but list of references remains the same, so errors/exceptions occur when viewing/rendering Tabgroups; complex logic would have to be implemented to render out something like "Tab was removed from datastore in unsupported way, remove it from the Tabgroup also?"

What do you suggest to tackle this problem? I will accept the answer that will cover a wide array of implications. Please note that we are talking only about XML persistence here, obviously in SQL we have little room to experiment since Tabgroups and Tabs would normally be in separate tables anyway (with a one-many relationship between them).

+1  A: 

Unless you have some very compelling reason why complicating the data store is a good idea, you should typically go with keeping it simple. Secondly, having read the entire post twice, I do not really understand what your question is.

I'm not quite sure what your problem is, but if you are asking whether your design should return a List<Tab> or List<string> where each string represents a link to a tab, then I would argue for List<Tab>. You can lazy load the entire structure except for the ID or whatever you were using for a link if loading is an issue. Generally it just makes things easier to get what you were looking for directly out of an object instead of having to get a list of links and load all of the links individually.

Without more information specific to the actual problem, I doubt anyone would be able to help you more than that other than to give some long winded pros/cons based on assumed circumstances.

NickLarsen
Your understanding of the problem was good enough and I agree that List<Tab> is the most logical choice.
mare