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