нормально когда это межграничное взаимодействие между разными частями системы и там есть недоверие.
внутри модуля уже ненормально, т.к. данные внутри должны быть довереные и провереные заранее.
и, конструкторы не возвращают ошибок. они могут только кидать исключения.
если ты будешь кидать исключения в любом месте, а не только в пограничных классах, получится весь твой код будет совсем небезопасный, и постоянно надо будет любую часть окружать try/catch, что не совсем круто