How to organize the set of all abstract classes in a portable framework (library)?
You want to implement several different projects that use similar functions (logic, data), except for some of the extensions from each project.
One solution: remove abstract common functionality in the library, and connect it to each project.
But as you combine more and more new projects with this library, it becomes clear that previous abstract functionality is insufficient and requires fine tuning.
There are 3 companies that are organized in different communication groups of employees, but there are common features: the dismissal, promotion. Put in an abstract class library core functions. But it turns out that the company's No. 1 group of employees should be organized according to the hierarchy (one Department is nested in the other), but the company No. 2 do not need nesting. If the nesting of employees to implement shared functionality, it is in some projects generally will not be used. You can make another class in the library that inherits basic functionality and extends functionality of nesting for groups of employees. But what if you need multiple such extensions of the same abstract class? But if one excludes the other?
Besides, if the framework (library) want to take advantage of people from another company that have nested groups of employees, but there is no functionality for the dismissal, what then? After all, the library has implemented an abstract class with the functionality of dismissal.
One side of the question: How is it possible to realize a comfortable and convenient library without knowing the details of the projects that will work with it, but knowing their overall concept?