Inheritance hell
As we all understand the basic principles of OOPs, inheritance is one of the most used OOP principle. It is definitely very handy in the enterprise software design as it helps extend the existing functionalities and helps improve/enhance the system progressively.
But this benefit can become a bane when not handled properly. Normally, inheritance is used when we want to generalize a behavior/functionality and then extend it on an as-needed basis. In reality, sometimes the parent class becomes so bloated that all the child classes unnecessarily carry (or inherit) nonrelated attributes/functionalities. This is called inheritance hell.
Furthermore, because Apex doesn't allow multiple inheritance (using classes), inheritance hell further leads to more issues if a given child class needs to extend functionalities from two different classes.
To avoid inheritance hell, we can use the strategy pattern. It helps enhance the capabilities of a class by separating the functional logic from...