[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