Take a look at the OpenAPI's exposed by great tools such as Borland's JBuilder, JetBrains IDEA, JEdit and Emacs for an idea of how these marvels are built.
Common techniques used to produce a product with complex functionality include:
1. A plugin design.
It must be possible to "add/register" new functionality without changing features. The core concepts should be small and form a stable core.
2. Observer/MVC pattern (of course).
Decouple that sucker...
3. One thing in one place (avoid duplication).
If you've a toolbar button, a menu item, a context menu item, and they all invoke the same
functionality using the same presentation names, icon, etc - all of these on-screen locations should be contrived from a single source "action" object.
4. Internal languages
Use scripting languages to expose common components (both for internal and external consumption) so that they may be reused in unforeseen ways.
Good luck...
Take a look at the OpenAPI's exposed by great tools such as Borland's JBuilder, JetBrains IDEA, JEdit and Emacs for an idea of how these marvels are built. Common techniques used to produce a product with complex functionality include: 1. A plugin design. It must be possible to "add/register" new functionality without changing features. The core concepts should be small and form a stable core. 2. Observer/MVC pattern (of course). Decouple that sucker... 3. One thing in one place (avoid duplication). If you've a toolbar button, a menu item, a context menu item, and they all invoke the same functionality using the same presentation names, icon, etc - all of these on-screen locations should be contrived from a single source "action" object. 4. Internal languages Use scripting languages to expose common components (both for internal and external consumption) so that they may be reused in unforeseen ways. Good luck...