Это компромисс.
Использование структур значений может быть прекрасным простым способом группировки данных вместе.Они могут быть очень хитрыми, если вы начинаете использовать множество вспомогательных процедур и полагаться на них за пределами их предполагаемого использования.Будьте строги к себе, когда и как их использовать, и они в порядке.Наличие нулевых методов для этих объектов - хороший способ сделать это очевидным для себя.
Возможно, у вас есть некоторый набор классов, которые вы используете для решения проблемы, я назову это модулем.Наличие ценностных структур внутри модуля легко рассуждать.За пределами модуля вы должны надеяться на хорошее поведение.У вас нет строгих интерфейсов на них, поэтому вы должны надеяться, что компилятор предупредит вас о неправильном использовании.
Учитывая это утверждение, я думаю, что они более уместны в анонимных или подробных пространствах имен.Если они попадают в общедоступные интерфейсы, люди склонны добавлять в них сахар.Удалите сахар или переработайте его в первоклассный объект с интерфейсом.
Я думаю, что они больше подходят как константные объекты.Проблема, в которую вы попадаете, состоит в том, что вы (пытаетесь) поддерживать неизменность этого «объекта» везде, где он используется в течение всей его жизни.Если другой уровень абстракции хочет их с небольшими мутациями, сделайте копию.Идиома именованного параметра хороша для этого.
Домен-управляемый дизайн дает вдумчивое, тщательное рассмотрение предмета.Это характеризует более практический смысл понимания и упрощения дизайна.
Чистый код также обсуждает эту тему, хотя и с другой точки зрения.Это скорее книга мораль .
Обе замечательные книги и обычно рекомендуются вне этой темы.