Supongo que está hablando de propiedades de solo lectura , o al menos de captadores de propiedades , ya que un establecedor de propiedades tendrá , en casi todos los casos, efectos secundarios. De lo contrario, no es muy útil.
En general, un buen diseño sigue el principio de la menor sorpresa . No haga cosas que las personas que llaman no esperan que haga, especialmente si esas cosas pueden cambiar los resultados futuros .
En general , eso significa que los captadores de propiedades no deberían tener efectos secundarios.
Sin embargo , tengamos cuidado con lo que entendemos por "efecto secundario".
Un efecto secundario es, técnicamente, cualquier modificación de estado. Ese podría ser un estado de acceso público, o ... podría ser un estado totalmente privado.
Los cargadores perezosos / diferidos son un ejemplo de estado que es casi exclusivamente privado. Mientras no sea responsabilidad de quien llama liberar ese recurso, en realidad está reduciendo la sorpresa y la complejidad en general mediante el uso de inicialización diferida. Una persona que llama normalmente no espera tener que indicar explícitamente la inicialización de una estructura interna . Entonces, la inicialización perezosa no viola el principio anterior.
Otro ejemplo es una propiedad sincronizada. Para que un método sea seguro para subprocesos, a menudo tendrá que estar protegido por una sección crítica o mutex. Entrar en una sección crítica o adquirir un mutex es un efecto secundario; estás modificando el estado, generalmente el estado global . Sin embargo, este efecto secundario es necesario para evitar un tipo de sorpresa mucho peor : la sorpresa de que los datos sean modificados (o peor, parcialmente modificados) por otro hilo.
Así que aflojaría un poco la restricción a lo siguiente: las lecturas de propiedades no deberían tener efectos secundarios visibles o efectos secundarios que cambien su semántica .
Si no hay una forma posible de que una persona que llama se vea afectada por un efecto secundario , o que incluso lo note , ese efecto secundario no está causando ningún daño. Si fuera imposible para usted escribir una prueba para verificar la existencia de un efecto secundario en particular, entonces está lo suficientemente localizado como para etiquetarlo como un detalle de implementación privada y, por lo tanto, no es una preocupación legítima para el mundo exterior.
Pero ten cuidado; Como regla general, debe tratar de evitar los efectos secundarios, porque a menudo lo que usted cree que es un detalle de implementación privada puede filtrarse inesperadamente y hacerse público.