Voici quelques arguments pour les propriétés et mes contre-arguments:
Plus facile à utiliser que d'écrire des méthodes getter et setter
Les paires de méthodes getter et setter sont une odeur de code. Les rendre plus faciles à écrire, c'est comme faciliter l'échec d'un test de mathématiques en utilisant un formulaire Scantron et en remplissant tous les «C». Les objets qui contiennent uniquement un état, pour la persistance, ne doivent pas utiliser de getters / setters et doivent créer des objets immuables au moment de la persistance.
Ce qui est important pour un consommateur d'un objet, c'est ce qu'il fait, pas comment il le fait. Son comportement est ce qu'il fait; son état est de savoir comment il le fait. Si vous vous souciez de l'état d'un objet (sauf pour la persistance, bien que cela casse également OO), vous ne faites tout simplement pas de POO et ne perdez pas ses avantages.
Ils donnent une indication approximative des performances aux consommateurs
C'est quelque chose qui pourrait changer à l'avenir, pour n'importe quelle propriété donnée. Supposons que dans la version 1.0, l'accès à PropertyX renvoie simplement un champ. Dans la version 1.5, si le champ est null, PropertyX utilise le modèle Null Object pour créer un nouvel objet null. Dans la version 2.0, le champ est encore validé par la méthode getter dans PropertyX.
Comme la propriété devient de plus en plus complexe, l'indication de performance d'utilisation d'une propriété semble de moins en moins véridique.
Ils sont meilleurs que les champs publics
C'est vrai. Mais les méthodes aussi.
Ils représentent un aspect fondamentalement différent d'un objet qu'une méthode, et tous les consommateurs de l'objet devraient s'en soucier
Êtes-vous sûr que les deux affirmations ci-dessus sont vraies?
Ils sont plus faciles à taper, mec
Bien sûr, la frappe myObject.Length
est plus facile que la frappe myObject.Length()
, mais cela ne pourrait-il pas être corrigé avec un peu de sucre syntaxique?
Pourquoi utiliser des méthodes plutôt que des propriétés?
Aucune garantie de performance. L'API restera véridique même si la méthode devient plus complexe. Le consommateur devra profiler son code s'il rencontre des problèmes de performances et ne pas s'appuyer sur Word-of-API.
Moins de réflexion pour le consommateur. Cette propriété a-t-elle un setter? Une méthode, bien sûr.
Le consommateur pense d'un état d'esprit approprié. En tant que consommateur d'une API, je souhaite interagir avec le comportement d'un objet. Quand je vois des propriétés dans l'API, cela ressemble beaucoup à l'état. En fait, si les propriétés en font trop, elles ne devraient même pas être des propriétés, donc vraiment, les propriétés dans un état API ARE telles qu'elles apparaissent aux consommateurs.
Le programmeur de l'API réfléchira plus profondément aux méthodes avec des valeurs de retour et évitera si possible de modifier l'état de l'objet dans de telles méthodes. La séparation des commandes des requêtes doit être appliquée dans la mesure du possible.
Je vous demande donc pourquoi utiliser des propriétés plutôt que des méthodes? La plupart des points sur MSDN sont des odeurs de code en soi et n'appartiennent ni aux propriétés ni aux méthodes.
(Ces pensées me sont venues après avoir pensé au CQS.)
type GetFoo() void SetFoo()
dix mille fois. Pendant tout mon temps à écrire du code C #, je n'ai jamais été dérouté par une propriété.