Here is my solution, based on use-cases and AOP.
- you need to separate persistence from your domain
- you need to have a proper use-case, not a single request-class, like above.
- notifications are notifications (twitter, fb), they are implemented with AOP
- spam detection and language detection are separated (discussable) with an aspect.
- there is an "app" object that wraps it all together.
The first file is the original example. The second file is mine.