Monday, January 12, 2009

Why everything "just works together"

With most software projects, if you have N options/features, the order of complexity is on the order of 2**N. So long as N is small, things go well, but as you add options and features, the complexity quickly gets out of hand--integration then becomes a black art. In contrast, the complexity of this project is on the order of b+N, where b is the complexity of the base system. That b is a bit large, so it makes it hard to come up to speed, but as the project grows, the overall complexity is proportional to the number of options/plugins. This is an astonishing result.

The technique we use to achieve this is by simply binding classes (and other configuration data) to element types. Each plugin defines new element types and also extends the configuration of pre-existing element types. The binding is all done in the .cfg file, which is generated from the .plugin file.

Now when the program first starts (empty database), it creates the ark root element, which contains configuration data about various sub-elements and child rolons which are to be created. These are created in turn, recursively, to generate all the architectural rolons needed to run the ark with a given set of plugins. Note that plugins never delete a pre-existing element type, nor do they ever change the binding and configuration data of an element--they only add additional configuration data. This is key, as it provides most of the decoupling we need to have a truly open and extensible platform where everything just works together.

http://agilewiki.wiki.sourceforge.net/

0 Comments:

Post a Comment

<< Home