What I usually end up doing is the following:
-define the incomplete abstract interface/class
-provide on or more implementors to it
In this way the framework allows for easy extending implementation while still being abstract enough.
The difficult thing is of course to finding the correct abstraction level for the abstract interface/class. |