Recently a question came up in the CQRS chatroom on Jabbr:
Here's the situation. New command comes in, They can sometimes be missing some info (for daft reasons), if it is missing info then I need to call off to an external api to get the info back. This external api is unreliable so it would be better to supply the information upfront if possible.
The fastest information can ever travel is 3*10^8 m/s - in a vacuum. It's 2/3rds that in a copper wire. In the ideal case.
Imagine two observers in the milky way galaxy, one at Terminus and the other at Star's End. They will observe events from all over the universe at different times - they will not agree on the order of events. What they can agree on is that eventually they will see all of them.
A discussion came up recently on the DDD/CQRS forums recently, that got sidetracked into 'where do the validations go' (along with a lot of weird nonsense about async command queues, http status code pedantry, etc, but we'll leave that for some other time). A large minority of developers - perhaps even a majority - seem to think that validations belong somewhere in the 'trusted' client.
I find this conclusion strange, as none of the .net framework code we work with on a daily basis actually works this way.