Conception de champs

Remarque

Ce contenu est réimprimé avec l’autorisation de Pearson Education, Inc. à partir des Instructions de conception d’une infrastructure : conventions, idiomes et modèles des bibliothèques réutilisables .NET, 2ème édition. Cette édition a été publiée en 2008, et le livre a été entièrement révisé dans la troisième édition. Certaines informations sur cette page peuvent être obsolètes.

Le principe de l’encapsulation est l’une des notions les plus importantes en conception orientée objet. Ce principe stipule que les données stockées à l’intérieur d’un objet doivent être accessibles uniquement à cet objet.

Un moyen utile d’interpréter ce principe consiste à dire qu’un type doit être conçu de telle sorte que les modifications apportées aux champs de ce type (modifications de nom ou de type) puissent être effectuées sans briser le code autre que celui pour les membres du type. Cette interprétation implique immédiatement que tous les champs doivent être privés.

Nous excluons les champs constants et statiques en lecture seule de cette limitation stricte, car ces champs, presque par définition, ne sont jamais obligés de changer.

❌ NE FOURNISSEZ PAS de champs d’instance publics ou protégés.

Vous devez fournir des propriétés permettant d’accéder aux champs au lieu de les rendre publics ou protégés.

✔️ UTILISEZ des champs constants pour les constantes qui ne changeront jamais.

Le compilateur grave les valeurs des champs constants directement dans le code appelant. Par conséquent, les valeurs constantes ne peuvent jamais être modifiées sans risque de rupture de compatibilité.

✔️ UTILISEZ des champs readonly statiques publics pour les instances d’objets prédéfinies.

S’il existe des instances prédéfinies du type, déclarez-les en tant que champs statiques publics en lecture seule du type lui-même.

❌ N’AFFECTEZ PAS d’instances de types mutables à des champs readonly.

Un type mutable est un type avec des instances qui peuvent être modifiées après leur instanciation. Par exemple, les tableaux, la plupart des collections et les flux sont des types mutables, mais System.Int32, System.Uri et System.String sont tous immuables. Le modificateur en lecture seule d’un champ de type référence empêche le remplacement de l’instance stockée dans le champ, mais il n’empêche pas la modification des données d’instance du champ en appelant les membres qui changent l’instance.

Portions © 2005, 2009 Microsoft Corporation. Tous droits réservés.

Réimprimé avec l’autorisation de Pearson Education, Inc. et extrait de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition par Krzysztof Cwalina et Brad Abrams, publié le 22 octobre 2008 par Addison-Wesley Professional dans le cadre de la série sur le développement Microsoft Windows.

Voir aussi