Ok, je comprends les conventions normales d'utilisation des verbes avec des fonctions et des noms avec des classes. Et les interfaces? Existe-t-il une méthodologie pour trouver des noms d'interface qui ne soit pas si évidente?
Juste pour être clair, je ne parle pas de mettre un "je" devant le nom ou d'utiliser camelCase ou PascalCase. Je m'interroge sur la méthode pour trouver un nom clair et sémantique pour une interface.
EDIT J'obsède comment nommer une interface de la manière la plus claire. Je suppose que cela doit juste être un nom aussi parce que quand je pense à nommer des classes, je pense à l'objet du monde "réel" le plus proche auquel il peut se rapporter. Je suppose que les interfaces du monde réel sont des choses comme un clavier, une souris, une télécommande, un écran ATM. Ce sont tous des noms. Quoi qu'il en soit, toute information supplémentaire sur un bon moyen de formuler des noms d'interface serait appréciée.
la source
Réponses:
Je dirais que cela dépend de ce que définit l'interface. Dans certains cas, lorsque l'interface est plutôt spécifique et détaillée, je pense qu'un nom est préférable. Les exemples sont
IList
,ICollection
.Parfois, bien qu'une interface concerne davantage l'ajout de certaines fonctionnalités générales à une classe. Dans ce cas, je pense qu'un adjectif est le meilleur. Sont des exemples
IDisposable
,IEnumerable
...Peut-être qu'une autre façon de penser à cela est le nombre de «capacités» définies par votre interface.
Par exemple, l'
IList<T>
interface définit ces capacités: Ajouter, Effacer, Contient, Insérer, Supprimer, ... Ce sont toutes les propriétés d'une liste,IList
c'est donc un bon nom.IDisposable
d'autre part ne définit qu'une seule capacité: Dispose. Il convient donc à tout ce qui est jetable. D'où le nomIDisposable
.la source
IEnumerable
), un nom "_er" si votre interface serait nommée d'après des choses que votre objet fait à d'autres objets ( par exempleIEqualityComparer
), et un nom général si votre interface est nommée d'après un type de chose dont elle imite le comportement (par exempleIList<T>
).I
est redondant.Une interface décrit le comportement de sorte que les noms doivent le dire. Je ne suis pas sûr d'une règle pour cela, mais vous connaîtrez le nom lorsque vous l'entendrez.
Quelques exemples:
Je pense qu'il n'est pas approprié de nommer les interfaces
I
et d'appelerSet
avecISet
car, en tant que développeur, vous ne devriez pas vous inquiéter s'il s'agit d'une interface ou d'une classe. Je vois que cette pratique n'existe pas en Java maintenant.la source
I
est redondant malgré tout. Alors pourquoi ne pas préfixer les classes abstraites avecA
, les classes régulières avecC
etc ??Puisqu'une interface n'est vraiment qu'une expression du «quoi» mais pas du «comment» d'un type, je les nommerais de la même manière que vous nommez les classes, du moins dans une perspective de discours. La seule chose que je pourrais ajouter à cela est qu'ils vont souvent être plus généraux que les implémenteurs spécifiques (par exemple, l'interface "Client" peut avoir des implémenteurs "ProspectiveCustomer" et "PayingCustomer").
la source
Une interface est utilisée comme une classe. Par conséquent, il doit également être nommé avec un nom lorsque vous nommez des classes avec des noms. Préférez les noms abstraits, par exemple "Véhicule" lorsque les classes sont "Voiture" et "Camion".
la source
Réponse rapide: L' interface est plus sur ajout d'un SET de capacités, les caractéristiques, les limites communes ou des interconnexions entre les entités, les classes, les modèles, concepts, etc ..
Une chose sur l'ajout d'un comportement commun aux classes et aux entités, puis un bon nom significatif viendra pour identifier l'ensemble des fonctionnalités liées.
Nom de l'interface comme:
IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.
expliquer probablement le concept.la source
IStateMachineBuilder
(nom),IBuildStateMachine
(nommé d'après une action),ICanBuildStateMachine
(nommé d'après une capacité), etc.Cela dépend, si l'interface ne contient que des méthodes, il sera bon de la nommer en utilisant des verbes comme "Actions" où comme si elle représente une classe générique contenant des champs finaux statiques, alors nous pouvons utiliser un nom générique comme "Véhicule"
la source