[Opensim-dev] Designing with reusability in mind

diva at metaverseink.com diva at metaverseink.com
Wed Dec 9 18:38:32 UTC 2009


In the same vein as Teravus' message about designing with 
instrumentation in mind...

I would like to ask for us to design with reusability in mind. Let's get 
out of the model that we are developing an application, and always think 
that we are developing components that can be used both for putting 
together an application that looks like SL, and for other applications 
as well.

Case in point: in the sequence of the conversation about free IARs, 
OARs, etc., I have been putting together a package with freebies. I 
thought about releasing it as an IAR, like everyone else is doing, but 
this has a problem: it requires operator access to the server -- not all 
users can take advantage of this free content.

Solution: let's use the underused OpenSim Library and add more stuff in 
there. No one has changed that part of OpenSim for ages! There's a good 
reason for it: adding content to it manually is a huge PITA and 
extremely error-prone. So, idea: let's take any IAR and write an 
external tool that converts it into the OpenSim Library format. That way 
different operators can provide different libraries very easily: just 
take your favorite IAR and dump it into your OpenSim Library, therefore 
making it available to all of your users.

This sounds easy enough. Justin has the code for unarchiving IARs... 
except that it's all tangled up with Scenes. :-/

The rule of thumb for reusability in the context of OpenSim is very 
easy: the region modules that come in OpenSim.Region.CoreModules.dll 
should be as thin as possible. They should only have enough meat to 
bridge between Scenes and whatever it is those modules actually do. 
"Whatever it is they do", for the most part, is relatively generic and 
should be factored out into their own dll, so that it can be reused from 
elsewhere that has nothing to do with scenes. Example: all the service 
connectors now can be reused out of the box by other tools to access 
remote OpenSim servers. (OpenSim.Service.Connectors.dll)

Counter-Example: inventory archiving/dearchiving. From looking at that 
code, the only reason why the actual worker code needs the Scene object 
is to be able to get to IInventoryService and IAssetService. So... it 
should get those instead of Scene, and it should be factored out from 
Region.CoreModules, because inventory archiving/dearchiving is a lot 
more generic than a Scene utility.

That way I could write this tool that I want in 4 hours reusing Justin's 
code as a dll, instead of having to copy-and-paste Justin's code and 
purge it from all references to Scene. I would simply need to provide my 
own implementation of IInventoryService and IAssetService that would 
write things in bin/assets and bin/inventory instead of sending them to 
a server.

The general request is this: let's not hide useful code under 
OpenSim.Region.*, which are components that only make sense for the live 
VW server. There's so many more tools/applications that can be done 
around it! -- let's not hide good code under there, where it can never 
be reused.

Crista / Diva




More information about the Opensim-dev mailing list