1- Triggering validation automatically previous to CRUD operations makes this operations difficult to extend, since validation would be triggered after the custom behavior if you call parent::operation() on the last line of the method.
2- Rules use to be different previous to insertion than after insertion.
3- As rules are static it's impossible to validate based on dynamic data.
Still I think validation rules belong to models. One approach could be to craft a pre-insertion and a post-insertion validation method.
An approach could be to
Wow! That approach seems very convincing to me, but I think it would be better to