web-dev-qa-db-fra.com

Est-il considéré comme une mauvaise pratique pour ajouter une logique dans un établissement?

J'ai sauté dans un projet et je vois que les autres développeurs ajoutent beaucoup de logique dans les setters des propriétés synthétisées. Je comprends comment cela fonctionne, mais je pense qu'il est difficile de comprendre le flux du programme; En lisant le code, chaque fois que je vois self.something = whatever, Je vérifie toujours si something s setter est remplacé.

Quelles sont vos opinions autour de ce sujet? Pensez-vous que c'est un signe de mauvaise architecture ou une solution élaborée?

Je serais heureux de lire plus à ce sujet si vous avez des liens/sources pertinents, il est tout simplement trop difficile d'obtenir de bons résultats Google, alors j'ai décidé de demander également ici.

Merci pour toute réponse et veuillez noter que je parle de l'objectif C au cas où vous n'avez pas vu la balise (même si cela ne devrait pas être un problème spécifique linguistique, je suppose).

28
phi

Est-il considéré comme une mauvaise pratique pour ajouter une logique dans un établissement?

NON

Les propriétés ont été inventées pour permettre aux concepteurs de classe d'avoir une logique attachée à une interface pratique d'accès et d'affectation sur le terrain.

Combien coûte trop? Cela dépend des responsabilités de la classe. Voici quelques éléments raisonnables de mettre dans un établissement:

  • mettre à jour certaines valeurs dérivées
  • informer les observateurs que l'état de classe a changé
  • propager le changement à certains objets contenus
  • propager le changement à un magasin de support
  • effectuer la validation

La programmation est plus facile lorsque les classes ont des interfaces qui rendent évidentes ce que la classe peut faire, sans fabriquer des appelants penser à la façon dont cela se fait. La logique de la logique derrière les releveurs de propriétés permet aux classes de cacher leur implémentation derrière une interface simple. Pour certaines classes, aucune méthode n'est requise. Tournez simplement les boutons en réglant les propriétés et lisez la sortie en obtenant des propriétés.

44
kevin cline

Les setters sont généralement utilisés pour modifier l'état d'un objet sans effets secondaires importants ni calculs lourds; utilisez des méthodes et des fonctions pour cela. La principale raison de la mise en oeuvre de réglage est Modification et maintenance d'un état valide. Donc, la plage de limitation, la fixation des drapeaux pour demander la recalcul ou le réglage des propriétés associées est absolument bien.

15
Rob van der Veer

Je ne sais pas Objective C, mais comme vous le dites, il semble une question assez générique pour tout OO langue. D'abord et relatifs à ces en, que ce soit d'avoir setters et getters dans la première place est une question de discussion (dans certains cas, leur existence se justifie par l'utilisation d'un cadre ou d'une bibliothèque).

Je crois que le nom de la méthode doit expliquer ce que fait la méthode et toute la méthode fait. De plus, la documentation associée à cette méthode doit décrire d'une manière plus explicite. En ce sens, un nom de méthode sous la forme " set " + {} nom ne devrait pas avoir d'effets secondaires autres que le réglage de la valeur d'une variable et qui devrait être la seule action qui lui est associé. Vérifier que l'argument est valable, est acceptable, mais il doit être décrit dans sa documentation.

7
DPM