DDD service has to do a Business Rule validation like PerformTransfer. So the interface lives in the domain model, but the implementation can live in the infrastructure.
Having an entity with a Validate() method is not a good idea. What if the entity being used in a different context like a outside API service which is different from the UI. The validation is different. The same validation rules don’t apply in both the contexts. So a visitor pattern where we need to have two validators. These two validators can handle two different contexts. This is why the IValidatableObject Validate() method accepts a ValidationContext.
The Validation Vs Business Rule verification happens in two different places. The basic validation can happen at the UI level. The UI does not have control after the first basic validation. Do we ask the user not to close the browser until the result comes back? Or we just inform that the status will be returned after a day.