Hi Jer,
we have been dealing with the same kind of questions (and still are now and
then).
We have a course engine out there, which has a very simple setup/interface
(although the inner workings are not that simple).
But we ran into the same problem, adding content required us to recompile
the engine now and then.
We thought about going the plugin way, and we even had most of the design
ready.
It involved something like loading a plugin which existed of a number of
classes defining the plugin, request/result types, registration to one
service bus or another etc. In the end a request wouldnt know which service
satisfied it, which plugin handled the result etc.
Basically it didnt involve a lot more than usual I think in terms of
patterns, using the command, businessdelegate, service, valueobject,
request/response (if you can call that a pattern), abstractfactory,
registries etc.
BUT the biggest problem at the moment is that the gap in terms of
refactoring between our current system and the 'utopia' system is too wide
to call it refactoring. Better to call it a complete rewrite. In addition,
the question we were asking ourselves was whether we were going to do this
because it would be uber cool to build such a plugin system, or that the
functionality required really demanded such as architecture.
In the end we chose to follow a different route at the moment and that is
refactoring our current system step by step. Not that it is a bad system, it
is pretty good as it is, but in order to be able to maintain/extend it etc
some refactoring is necessary. Maybe if the requirements require it (:-S)
and the refactoringsprocess has gone far enough, the plugin system will find
its way in eventually.
Maybe it is of any use to you if I describe the current system:
the current system has a few part, a controlpanel, a dialog panel and a
locationpanel
These parts supports different commands, eg loadSwf, showDialog,
addTabButton etc
All these commands are supplied by the backend.
So basically an empty interface starts up and sends a systemstart event to
the backend.
The backend says load location A, show dialog B, and adds these 3 buttons.
The location can be anything, for example we have an fake email application,
a notepad, panorama's etc, but the most basic location type is simply an
image with hotspots. If you click on a hotspot, an event goes back to the
server and the server tells us what to do again such as load another
location, remove some buttons, add some tabs.
In the end its a complete elearning/adventure style kind of engine.
HTH
JC
On 8/22/07, Jer Brand <[EMAIL PROTECTED]> wrote:
AS2 / Flash 8 project and needing help with the design. I'm probably going
into way too much detail for the question but...
I'm working on course template or engine (for lack of a better term) to
deliver content swf's. The problem in our shop is the massive amount of
change in basic functionality for each course have meant (before I worked
here) the template code has to change every course. This, to me, is a very
bad thing.
My solution is to build the core template to be almost slide show simple,
but loads classes from external swfs as "plugins" and broadcasts a number
of
events. Each of the plugins's implements an interface that tells the main
app what events the plugin should be subscribed to.
Nearly all the functionality is contained in the plugins: LMS
communication,
layout, accessibility, the actual interface, etc. Plugins have to be able
to
modify or add content to the main app and the loaded content pages.
Plugins
also have to be able to tell the main app when they're done doing
performing
their edits at each event.
Now, I have a working solution, It does the job, and does it well.
However,
the design of the app and plugins are heavily interconnected. To get the
job
done, the main app has to constantly pass around pieces of itself and
other
plugins (like the display area or the UI), the interface to keep things
working smoothly.
Obviously it's not good design, but the prototype is out of the way, and I
know it's not an invalid path to use something like this. Now I'm looking
for a better way. Is there a Pattern or common practice for designing a
plugin scheme? My first thought was "Hey, isn't there a Plugin pattern?"
but
my google skills are failing me on finding anything about it, or how
anyone's done this in the past.
Any help to be had or is this such a specific thing that general "this is
the best pattern" isn't a valid question.
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com