Говоря про валидность/инвариант ООП-сущности мы говорим не про валидность полей формы, а
про это.
Когда у любого объекта открыты только конструктор и методы, напичканные проверками на notEmpty, unique, inArray и т.п, всегда гарантирующими его согласованность. И поведение этих методов снаружи перепроверено юнит-тестами.
В итоге такой объект всегда контролирует себя. Присвоить ерунду или что-то в нём рассогласовать невозможно без хаков вроде рефлексии чисто физически.
Если у сущности есть только четыре метода, то это гарантия, что все программисты в проекте с ней работают только через них. Если два поля всегда должны меняться вместе, то меняем их одним методом. И никто в обход этого метода их неприсвоить не забудет.
Если все поля приватные и без прямых сеттеров, то можно эти поля внутри как угодно переименовывать/переносить не боясь, что какой-то сервис сломается.
В итоге имеем полный контроль над полями, полную предсказуемость поведения, самодокументированный интерфейс и возможность удобного юнит-тестирования логики методов.
А если сущность разрастается, то целесообразно разбить её по ответственностям на несколько мелких.