Writing much of the code on top of complex frameworks [] instead of using layered design is an anti-pattern.
This is because:
Many software developers have an unfortunate tendency to write large applications directly on top of User Interface frameworks. A failure to separate User Interface code from the domain data structures and algorithms is an example of the excessive frameworks anti-pattern.
Similarly many software developers write applications on top of messaging frameworks.
Excessive use of dynamic polymorphism increases abstraction in a bad way, it hurts readability of the code.
Rather than have function names which actually say what they do, there is a tendency to have generic names
like OnMessage
or OnKeyDown
.
For example, it's probably a good idea for a function which might start a world war to have a descriptive
name such as LaunchNuclearMissile
rather that lurk in a function named
OnButtonPressed
.
The Single responsibility principle (SRP) [] suggests a message handler should only be responsible for receving the message and making a call on some other object which executes some function. This means the message handler has very little code, it's just an thin adapter []. In that case most of the code is written in a layered manner, respects the SRP, and uses descriptive names for functions, rather than being written on top of some framework.