Je suppose que vous parlez de propriétés en lecture seule , ou du moins de getters de propriétés , car un configurateur de propriétés va, dans presque tous les cas, avoir des effets secondaires. Sinon, ce n'est pas très utile.
En général, un bon design suit le principe de la moindre surprise . Ne faites pas des choses que les appelants ne s'attendent pas à ce que vous fassiez, surtout si ces choses peuvent changer les résultats futurs .
En général , cela signifie que les acquéreurs de propriétés ne devraient pas avoir d'effets secondaires.
Cependant , faisons attention à ce que nous entendons par «effet secondaire».
Un effet secondaire est, techniquement, toute modification d'état. Ce pourrait être un État accessible au public, ou ... ce pourrait être un État totalement privé.
Les chargeurs différés / différés sont un exemple d'état presque exclusivement privé. Tant que ce n'est pas la responsabilité de l'appelant à libérer cette ressource, alors vous êtes en train réduirez la surprise et la complexité en général en utilisant l' initialisation différée. Un appelant ne s'attend pas normalement à devoir signaler explicitement l'initialisation d'une structure interne . Ainsi, l'initialisation paresseuse ne viole pas le principe ci-dessus.
Un autre exemple est une propriété synchronisée. Pour qu'une méthode soit thread-safe, elle devra souvent être protégée par une section critique ou un mutex. L'entrée dans une section critique ou l'acquisition d'un mutex est un effet secondaire; vous modifiez l'état, généralement l' état global . Cependant, cet effet secondaire est nécessaire afin d'éviter une sorte de surprise bien pire - la surprise de la modification des données (ou pire, partiellement modifiée) par un autre thread.
Je voudrais donc assouplir un peu la restriction comme suit: Les lectures de propriétés ne devraient pas avoir d' effets secondaires visibles ou d'effets secondaires qui changent leur sémantique .
S'il n'y a aucun moyen possible pour un appelant d'être affecté ou même conscient d'un effet secondaire, cet effet secondaire ne fait aucun mal. S'il vous est impossible d'écrire un test pour vérifier l'existence d'un effet secondaire particulier, alors il est suffisamment localisé pour être étiqueté comme un détail d'implémentation privé, et donc sans préoccupation légitime pour le monde extérieur.
Mais soyez prudent; en règle générale, vous devriez essayer d'éviter les effets secondaires, parce que souvent ce que vous pensez peut - être un détail de mise en œuvre privée peut fuir de façon inattendue et devenir public.