I want to design this system which has two major components:
- Base/core stuff. Never changes.
- Stuff running on the core. Changes rather frequently.
This is going to be developed in Java, but the problem applies to any classical OO language. How can I replace 2 above in a running system without recompiling 1, and without even stopping 1 when it's running. It's ok to recompile 2, but I shouldn't be disturbing 1.
Is there any design-pattern to do this? I would think this is somewhat similar to plugin behavior, but 2 is actually critical to the working of the application, not just an add-on.