While the above analogies are alright, I personally would like to use Legos for this. (Plus it get to use Legos!!!)
So lets start at the very basics. In the following figure, the green base would represent Forge, where Red would represent the Sponge API.
Now plugins hook into the Sponge API, what would that look like? Lets take a look:
The orange blocks would represent a very user-friendly plugin, or something like minigames. The yellow block would represent something that a Server-Owner would use heavily; think Essentials. The blue block would represent a smaller plugin.
Now lets look at what plugins that have dependencies look like.
In the above, The dark green pegs illustrate where a dependency exists. The gray blocks represent plugins that require the immediately connected block to exist for it to work. This means the top level grey blocks need 2 plugins: The middle layer of grey blocks, and the orange blocks. However, the Middle level of grey blocks only need the orange blocks to function. For this, Think of Multi-Verse & Multi-Verse Portals, both of which need a ‘core’ plugin (name eludes me currently).
Lets take a look at what would happen if we removed the middle grey layer because we think it’s not needed.
Now if this was the real world, the floating pieces would fall and break apart. Since the plugin still retains it’s dark green pegs, Sponge knows it’s needing something. So Sponge would read the instruction booklet provided by the grey blocks. Sponge finds that it needs another plugin that is not found, so it tosses aside these pieces and continues building the rest of the blocks.
Now let’s think of something DynMap. This would use Sponge, and other resources to preform it’s tasks. It would look something like this:
The two brown pieces represent the plugin and it’s connection to the lime green block, which represents the web server. The four black disks represent the User interface of the webpage. Please note that the white pieces are there to signal that is no longer Forge.
I hope this helps anyone, and if you find mistakes, please feel free to point them out so I may correct them.
Thanks!