A typical Delphi application tends to be composed of many layers, modules, or structures, such as Forms, Views, Presenters, Data Modules, and Services. Effective communication between these components can become difficult if they are tightly coupled together.
In the lower level of your app architecture, such as the Data Module, when an action happens, you might want to send data to a higher level, such as the view (Form). To do this, you might want to create a listener interface, async tasks, or callbacks. All of these will work, but they have some major drawbacks:
- Direct or tight coupling of components
- Inflexible, changes are expensive
- Boilerplate code
- Propagation through all layers
- Repetition of code
- Difficulty in testing
- Increased risk of bugs
All of these things are brilliantly solved by modern model-view-whatever (MVW) frameworks...