Mike Mazur wrote: > Hi, > > On Thu, 05 Feb 2009 09:04:45 -0500 > Sean Dague <[email protected]> wrote: > >> Mike Mazur wrote: >> <snip> >>> Of these columns, everything except data (and probably id) is >>> actually metadata that describes the asset. In the database it >>> makes sense to store all this information in the same table since >>> there's a tight coupling between the data and its metadata. >> These are either tightly coupled things, or not. If they are tightly >> coupled they are 1 object, 1 database table, and 1 level of xml. >> >> If they are not tightly coupled they are 2 things. 2 objects, 2 >> database tables, and 2 levels of xml. >> >> Anything else is madness, and definitely the wrong direction IMHO. >> There is no explanation that's going to convince me that 2 objects >> should map to 1 table, so don't bother trying. :) > > Alright, an asset and its metadata are either two things or one thing. > After some reading I'm beginning to see the reason behind your strong > conviction. In the interest of not changing the DB schema, let's try > to solve this by treating the asset data and its metadata as one object. > > To do this, the AssetBase class can inherit from the AssetMetadata > class. The result would be as follows: > > class AssetMetadata > { > string _name; > string _description; > // etc... > > public virtual string Name > { > get { return _name; } > set { _name = value; } > } > // etc > } > > class AssetBase : AssetMetadata > { > byte[] _data; > > public virtual byte[] Data > { > get { return _data; } > set { _data = value; } > } > } > > This way the AssetBase class pretty much remains as-is, and the > AssetMetadata class can be used on its own to represent just the > metadata. One class (AssetBase) mapped to one table (assets), and no > changes to the mappers are necessary. > > Would this work? One thing I'm not sure about is how NHibernate would > handle fetching only metadata or persisting AssetMetadata objects. This > is pretty straightforward in the other AssetStores already in OpenSim.
What would happen if some future plugin to OpenSim wanted to add extra metadata fields? Would then need to extend the AssetBase class? This seems a little icky to me (as opposed to extending a separate AssetMetadata class) but maybe that's just me. Also to be penickity, could we prefix non-public fields with m_ rather than just _ ? I think this is the standard that we're following, though I have no desire to get religious about it. -- justincc Justin Clark-Casey http://justincc.wordpress.com _______________________________________________ Opensim-dev mailing list [email protected] https://lists.berlios.de/mailman/listinfo/opensim-dev
