Semi-OT: Programming Question

Charles, Joshua Micah (UMKC-Student) jmcqk6 at umkc.edu
Thu Mar 10 17:30:02 CST 2005


I'm working on an application framework idea that I've had, and have ran into the following problem.  My original (rough) design called for a monolithic core that provided the main functionality I was looking for, and would be extensible via plugins.  I then realized, though, that my software would be much more flexible if I started out with a plugin framework, and made all functionality compartmentalized into plugins.  That way if a user doesn't want some functionality, they don't need to install that plugin.  The problem I'm running into is trying to figure out exactly how I am going to implement it.  I've read a book on design patterns, and have done some good research on google, but it seems most of the documentation I'm finding is very basic (i.e. how to dynamically load a dll, and execute the code it contains.)

Here's where I'm at right now.

I can load a third party dll into my program and execute the code, but I can't quite figure out how to make it interact with dynamic data.  Should I create large object that contain the data, and when the plugin is called, through an event of some sort, just pass in that object?  

I'm also considering going through the MyPhpNuke code to see how they do it in PHP.  Would this be helpful even though it's a interepreted language, and I'm using a compiled language (C#)?  

I'm also looking at the option for doing all the extensions through a scripting language, but that seems to me to cause other problems.  What I would really want is to have complex plugins that are encapsulated into a single dll. Distribution would be made via a zip file, which would contain the zip file, a SQL file ( containing any modifications to the database needed), a manifest file ( with version information ), documentation, and a xml config file that will hold any needed configuration settings.

Another option would be that I provide an interface to keep all configuration in a single place, which might be more elegant.

I've been reading through the RainbowPortal code to try to figure out exactly how they did it, but the fine points elude me.  Does anyone know of any good documentation that can get me to the next step?

Thanks,
Josh


More information about the Kclug mailing list