Programming is like writing.
Code must be easy to read, and understand. For this reason I do not like very much technologies like:
- Aspect oriented programming
- SQL Triggers
- Web filters
- Last minute event listeners (like the one check before an entity save and ‘patch’ some data on the fly or launch additional events).
These technology are nice, but works ‘outside’ the logic of a piece of code you are writing/reading, and are mostly side effects.
Side effects are the evil of programing in my humble opinion because can create unexpected bugs.
Also side effect can increase maintenance costs.
I have some heavy doubts also on event-based programming because tracing and orchestrating events can become a burden.
But heser are just my own opionions for sure: if you have a model-driven system and you are able to keep your mantenance factor low, so far so good!