Let’s say I have totally made up class which has an Email property and Method SetEmail which contains some validation logic
but I tend to believe that it’s way “too deep” and the real validation should be performed way earlier, just right after user sends their data/request/whatever,

so generally I’d want to use Fluent Validation and expect those Exceptions from SetEmail method to never be thrown unless e.g developer fucked up something, so generally this validation would be to prevent other people that have access to codebase to prevent silly mistakes
but now we have validation logic in two places, in class and in

FluentValidation
how can we make single source of validation without adding fluent validation to our domain/core models?
is there any way to do that without having to create e.g List of
or maybe more “sane”, I guess?
or maybe I should take totally different approach to this?

I never put validation in the model. Thats ehat the validator is for. It validates the entire model. You can then create different validators for the same model for different contexts if necessary.
I never put validation in the model.

That’s what I currently do, but I’m finding it weird that somebody can create e.g an instance of my domain object that’s totally flawed.
Maybe using Builder or any similar pattern to hide possibility of creating those domain objects without correct data is the way?
It will return some Validation Result which returns success, error messages and all that basic stuff

source