54 votes

Convention de dénomination des interfaces

C'est une question subjective, bien sûr, mais je ne vois rien de positif à ce que les noms d'interface soient précédés d'un "I". Pour moi, Thing est pratiquement toujours plus lisible que IThing .

Ma question est la suivante : pourquoi cette convention existe-t-elle alors ? Bien sûr, elle permet de distinguer plus facilement les interfaces des autres types. Mais cet argument ne s'étendrait-il pas à la conservation de la notation hongroise, qui est maintenant largement censurée ?

Quel est votre argument pour ce "je" maladroit ? Ou, plus important encore, quel pourrait être celui de Microsoft ?

77voto

Jon Limjap Points 46429

Les conventions (et les critiques à leur encontre) ont toutes une raison d'être, alors passons en revue certaines de ces raisons.

  • Les interfaces sont préfixées par I pour différencier les types d'interface des implémentations. - Par exemple, comme mentionné ci-dessus, il doit y avoir un moyen facile de faire la distinction entre Thing et son interface IThing la convention sert donc à cette fin.

  • Les interfaces sont préfixées I pour les différencier des classes abstraites. - Il y a une ambiguïté lorsque vous voyez le code suivant :

    public class Apple: Fruit

    Sans la convention, on ne pourrait pas savoir si Apple était héritant de d'une autre classe nommée Fruit ou si c'était un mise en œuvre d'une interface nommée Fruit alors que IFruit rendra cela évident :

    public class Apple: IFruit

    Le principe de la moindre surprise s'applique.

  • Toutes les utilisations de la notation hongroise ne sont pas censurées - Les premières utilisations de la notation hongroise comportaient un préfixe qui indiquait le type de l'objet, suivi du nom de la variable ou parfois d'un trait de soulignement avant le nom de la variable. C'était utile pour certains environnements de programmation (pensez à Visual Basic 4 - 6), mais au fur et à mesure que la programmation orientée objet gagnait en popularité, il est devenu peu pratique et redondant de spécifier le type. Cela devenait particulièrement problématique lorsqu'il s'agissait d'intellisense.

    Aujourd'hui, la notation hongroise est acceptable pour distinguer les éléments d'interface utilisateur des données réelles et des éléments d'interface utilisateur associés de manière similaire, par exemple, txtObject pour une zone de texte, lblObject pour l'étiquette qui est associée à cette zone de texte, tandis que les données de la zone de texte sont simplement Object .

    Je dois également souligner que l'utilisation originale de la notation hongroise ne servait pas à spécifier les types de données (appelée notation hongroise système) mais plutôt à spécifier l'utilisation sémantique d'un nom de variable (appelée notation hongroise apps). Pour en savoir plus, consultez le site entrée wikipedia sur Notation hongroise .

24voto

Jon B Points 26872

La raison pour laquelle je le fais est simple : parce que c'est la convention. Je préfère la suivre plutôt que d'avoir un code différent, ce qui le rendrait plus difficile à lire et à apprendre.

23voto

Marc Gravell Points 482669

Eh bien, une considération évidente serait le (très commun) IFoo y Foo (lors de l'abstraction de Foo ), mais plus généralement, il est souvent fondamental de savoir si quelque chose est une interface ou une classe. Oui, c'est en partie redondant, mais, selon l'OMI, c'est différent de choses comme sCustomerName - ici, le nom lui-même ( customerName ) devrait être suffisant pour comprendre la variable.

Mais avec CustomerRepository - c'est une classe, ou l'interface abstraite ?

Aussi : attente ; le fait est que, à tort ou à raison, c'est ce que les gens attendent. C'est presque raison suffisante.

20voto

0sumgain Points 502

Thing est un nom plus lisible que IThing . Je suis de l'école de pensée selon laquelle nous devrions programmer en fonction des interfaces plutôt que des implémentations spécifiques. Donc, de manière générale, les interfaces devraient avoir la priorité sur les implémentations. Je préfère donner un nom plus lisible à l'interface plutôt qu'à l'implémentation (c'est-à-dire que mes interfaces sont nommées sans le préfixe "I").

10voto

Otávio Décio Points 44200

Je pense que c'est mieux que d'ajouter un suffixe "Impl" sur votre classe concrète. Il s'agit d'une seule lettre, et cette convention est bien établie. Bien sûr, vous êtes libre d'utiliser le nommage que vous souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X