А зачем получать приватные поля объекта
А их надо получать только потому, что они публичные, но сделаны приватными только для того чтобы их нельзя было изменить извне!
А так это полностью публичные данные - контракт объекта. И задача объекта предоставлять эти данные (его основная задача). Как вторая задача мутировать эти собственные публичные данные, а также дополнительный скрытый стейт (скрытый стейт не доступен извне, на то он и скрытый). И когда этих необходимых публичных данных немного - пофиг можно сделать явный геттер, но когда этих полей больше 20 объект получается на 90% состоящий из бестолковых геттеров (классический пример кода ради кода). А рефакторить потом это когда какие-либо поля меняются вообще одно удовольствие...
Value objects - это особый частный случай, это и не объект даже, а кастомный тип данных, типа структуры в С.
Да, частный, но это не отменяет что их тоже надо как-то делать.
А то уже несколько лет как мода пошла - пишем явное гавно, знаем что гавно, знаем что из-за тяжелого наследия пхп и/или недостающего синтаксиса. Но начинаем аргументировать высокими материями, что типа так и надо и это правильно.
В горячо любимом многими здесь на форуме сишарпе это давно есть и активно применяется.