Я припускаю , що ви говорите тільки для читання властивостей, або принаймні власності видобувачів , так як властивість сетера є майже в кожному випадку, будуть мати побічні ефекти. Інакше це не дуже корисно.
Загалом, хороший дизайн іде за принципом найменшого сюрпризу . Не робіть дій, яких абоненти не очікують від вас, особливо якщо ці речі можуть змінити майбутні результати.
Взагалі , це означає, що власники нерухомості не повинні мати побічних ефектів.
Однак давайте уважно ставимося до того, що ми маємо на увазі під «побічним ефектом».
Побічний ефект є, технічно, будь-яким зміною стану. Це може бути загальнодоступний стан, або ... це може бути повністю приватна держава.
Ледачі / відкладені навантажувачі - один із прикладів стану, який майже виключно є приватним. Поки ви не зобов'язані абонента звільнити цей ресурс, ви фактично зменшите сюрприз та складність загалом, використовуючи відкладену ініціалізацію. Зазвичай абонент не сподівається явно сигналізувати про ініціалізацію внутрішньої структури. Отже, лінива ініціалізація не порушує вищезазначеного принципу.
Ще один приклад - синхронізована властивість. Для того, щоб метод був безпечним для потоків, його часто доведеться захищати критичним розрізом або мютекс. Введення критичного розділу або придбання мютексу є побічним ефектом; ви змінюєте стан, як правило, глобальний стан. Однак цей побічний ефект необхідний для того, щоб запобігти набагато гіршому вигляду сюрпризу - здивування даних, що змінюються (або ще гірше, частково модифікуються) іншим потоком.
Тому я трохи послаблюю обмеження на наступне: Зчитування властивості не повинно мати видимих побічних ефектів або побічних ефектів, які змінюють їх семантику .
Якщо немає можливого способу, щоб абонент коли-небудь зазнав впливу або навіть знав про побічний ефект, то цей побічний ефект не приносить ніякої шкоди. Якщо вам неможливо було б написати тест, щоб перевірити існування певного побічного ефекту, то його достатньо локалізувати, щоб позначити його як приватну детальну інформацію про реалізацію, і, таким чином, не мати законних проблем для зовнішнього світу.
Але будьте обережні; як правило, слід намагатися уникати побічних ефектів, тому що часто те, що ви можете вважати приватною деталлю впровадження, може несподівано просочитися та стати загальнодоступним.