Dois-je utiliser la propriété d'un objet ou la variable interne lors du codage à l'intérieur de l'objet?

voix
4

Je nettoyais un code dans une classe qui possède une propriété réglable, avec une variable locale tenant la valeur.

Certaines parties du code appellent actuellement à l'extérieur pour obtenir la valeur plutôt que d'utiliser sa propre propriété, d'autres parties utilisent parfois la propriété elle-même tandis que dans d'autres la variable locale est utilisée.

Dans ce cas, la propriété est simplement définie par la méthode de l'usine qui crée un objet de cette classe, de sorte que la propriété est toujours la même que la variable. Cependant, je ne suis pas sûr que je devrais supposer que ce soit le cas dans le code que je vous écris comme qui le rend plus difficile à l'avenir d'ajouter une logique derrière la méthode de lecture.

Est-ce quelque chose où soit peut-être raison, ou suis-je oublié quelque chose dans mes principes de base OO?

Créé 01/06/2012 à 07:07
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
1

Afin de réduire la complexité et d'accroître la maintenabilité.

La première chose que vous devez faire est de réduire le nombre de places un élément exist (que vous semblez être faire).

Ensuite, vous devez utiliser des astuces de langue pour réduire la taille du code. Pour exmaple dans certaines versions de c #, vous n'êtes pas obligé de déclarer des champs pour maintenir les valeurs des propriétés.

Une fois que vous avez fait cela, vous pouvez soit CHOISIT méthode - il n'y a pas l'optimisation des performances qui vient d'un sur l'autre. Mais pour être cohérent. C'est augmentera maintenabilité.

Personnellement, je préfère toujours utiliser les propriétés où je peux.

Créé 01/06/2012 à 07:17
source utilisateur

voix
0

Du point de vue OO, je pense qu'il ya deux types de propriétés. (Remarque: cela ne vaut que de l' intérieur de la classe utilisateurs classe. Ne doivent pas être au courant de cette différence.)

Certaines propriétés sont vraiment classes indépendantes contenues dans la classe principale. (La classe « principale » étant la classe considérée, pas nécessairement celui qui commence un programme.) Ils doivent être référencés que par la propriété, même dans le code de la classe principale. En regardant ses méthodes get et set devrait vous raconter toute l'histoire de la propriété. Ils ne sont pas partie intégrante de l'objet principal, mais plutôt des informations associées, comme les champs publics, mais plus sûr.

L'autre sorte sont partie intégrante de l'objet principal. Dans les cas extrêmes, ils peuvent même pas un champ associé; lorsqu'il est appelé, le getter peut assembler une valeur avec des calculs impliquant de nombreux domaines. Quand il y a un seul champ, le code interne qui lit et écrit est apte à trouver le getter et setter faire trop de changements. (L'objet peut suivre une valeur qui commence comme 5. Au fil du temps, 10 peut - être soustraites et 12 ajouté. À ce moment - là, la valeur doit être 7. Mais le getter pourrait ne vouloir admettre que le monde extérieur ayant une valeur inférieure à zéro, alors quand la valeur est -5 il retourne 0.)

Je décide quel type de propriété chacun est, puis aller dans un sens ou dans l'autre. Ne pas diviser la différence. Soit toutes les références doivent être à la propriété elle-même ou toutes les références doivent être au champ ou les champs derrière. (Sauf il peut être préférable de faire référence à la propriété directement plutôt que de dupliquer le code dans le getter et setter. Je ne suis pas réel à l'aise avec cela, cependant.)

Par « appel à l'extérieur » Je crois qu'il existe une méthode normale qui retourne la valeur du champ. Cela pourrait donner un sens. Pour être intuitive, une propriété doit se comporter comme un peu comme un champ public possible, où une méthode régulière peut apporter des modifications. (Pensez à une propriété DistanceInFeet et une GetDistanceInMeters méthode ()). Et il serait logique d'appeler une méthode Get plutôt que de dupliquer son code. Cela ne signifie la propriété d'ensemble est du second type, une partie intégrante de l'objet.

Ainsi, le code que vous nettoyez peut-être raison, OO-sage - mais je soupçonne pas.

Créé 01/06/2012 à 21:59
source utilisateur

voix
0

J'utilise les propriétés, à l' exception des champs que je les marquer comme ce readonlyqui signifie qu'ils obtiennent leur valeur constante que par l' initialisation objet / constructeur.

Propriétés à moi sont plus faciles à entretenir si des exigences de votre changement d'application à l'avenir. Il vous suffit d'ajouter du code dans un seul endroit.

Créé 01/06/2012 à 07:49
source utilisateur

voix
0

Utiliser les propriétés mises en œuvre automatique et ajouter seulement une variable privée et code get / set supplémentaire si vous avez besoin plus tard.

par exemple

  public int CustomerID { get; private set; }
Créé 01/06/2012 à 07:14
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more