I've been struggling with coming up with a way to handle validation in my command bus architecture.
Throwing validation exceptions in middleware felt wrong. Those aren't really exceptional occurences. Validating data outside of the bus(in controllers/console commands) felt wrong. Validation could be easily side-stepped. Validating in handlers felt cluttered and seemed to violate the SRP.
I think I've finally come up with something I'm fairly happy with though.