7
votes

Nombre de méthodes dans une interface

Je sais que cela pourrait sembler une question controversée, mais cela n'est vraiment pas censé être. Existe-t-il un nombre optimal de méthodes dans une interface.

Par exemple, je déteste personnellement une interface avec 20 méthodes. Il est juste difficile à mettre en œuvre. Le contrat semble difficile à maintenir. De même si le nombre de méthodes est juste 1. Cela me fait me demander si c'est vraiment une bonne abstraction.

Toute pensée?


2 commentaires

Cela devrait être dans la communauté wiki BTW ...


"De même si le nombre de méthodes est juste 1. Cela me permet de me demander s'il s'agit vraiment d'une bonne abstraction." <- pourquoi? Il existe de nombreuses interfaces avec une seule méthode qui utilise beaucoup. Comparables et iTables viennent à l'esprit - ceux-ci sont certainement assez utiles.


10 Réponses :


5
votes

Il y a un Etude bien connue qui suggère que le nombre d'éléments d'information Nous pouvons traiter à la fois est de sept, plus ou moins deux. J'ai souvent constaté que ceci est une bonne règle de question de ce type de question - dans ce cas, si l'interface est conçue pour gérer un ensemble de fonctionnalités individuelles, nous ne pourrons probablement pas comprendre la fonctionnalité comme un seul définir si c'est beaucoup plus de sept.

Toutefois, pour de nombreuses interfaces, un développeur n'a pas besoin de pouvoir comprendre la fonctionnalité en tant que jeu unique, auquel cas cette règle ne serait pas pertinente.


0 commentaires

0
votes

Le moyen de faire face à de nombreuses méthodes lorsque vous n'avez besoin que de mettre quelques-unes est abstraite classes qui fournissent des implémentations par défaut ou jetez notimplementaedException . S'il n'y a qu'une seule méthode, il est probablement d'accord car il existe des méthodes qui n'attendent que d'une iterface et d'appeler cette méthode. Il y a beaucoup de motifs, un vistor, par exemple, qui n'a besoin que d'une méthode.


0 commentaires

5
votes

Les interfaces de puits avec une méthode ont généralement leur objectif et vous pouvez les implémenter anonymement plus facilement. Ma règle de base est autant de méthodes que nécessaire pour avoir . Mais de nombreuses méthodes d'une interface suggèrent généralement que vous pouvez le scinder en plusieurs autres interfaces, en particulier lorsqu'il affecte différents domaines de tâches (par exemple, un userLoginandAdMinistrationInterface devient une interface utilisateurLogin et une interface userAdMinistration). Vous pouvez implémenter autant d'interfaces que vous le souhaitez dans une classe et ils peuvent également être sous-classées. Alors les fractionnez pas du tout mal.


0 commentaires

18
votes

Une interface doit avoir exactement autant de méthodes que nécessaire. Exemples:

java.lang.itéable - 1 méthode
java.lang.caLable - 1 méthode
Java.Util.Collection - 14 Méthodes
java.util.list - 25 méthodes (y compris ceux de la collection)

La réponse est donc - ne prenez pas le numéro sous forme de critère pour votre interface. Au lieu de cela, mettez des méthodes dans des interfaces où elles appartiennent logiquement.


6 commentaires

java.lang.runnable - 1 Méthode :)


Java.io.Sérialisable - 0 Méthodes :)


sérialisable est une histoire assez différente;) ( clonable est même une autre histoire différente)


@Bozho: Donc Liste est la meilleure abstraction jamais créée par l'homme pour une liste et que l'abstraction parfaite doit avoir "exactement" [sic] 25 méthodes? Autant que j'aime Java, je n'envisagerais pas exactement la conception des collections de Java par défaut pour être la totalité / la conception de l'OO (dans ce cas, elle peut très bien être être très bien possible que l'abstraction de la liste soit elle-même dépendant d'autres abstractions, au lieu d'avoir 25 méthodes ...). Je n'aime tout simplement pas un exemple montrant des exemples de collecte et de liste et de dire qu'ils ont "exactement autant de méthode qu'ils ont besoin" .


Le cadre de collecte Java est conçu avec beaucoup de pensée et je ne le critiquerais pas. Et comme je l'ai dit, les 25 méthodes comprennent celles de la collecte (une abstraction plus élevée).


Je trouve le motif de marqueur utile à l'occasion également, et cela est généralement mis en œuvre comme une interface sans méthodes.



5
votes

Une interface doit avoir exactement autant de méthodes que besoins .

Si ce nombre est important, la justification doit être examinée avec soin, mais peut être valide.

D'autre part, il y a (au moins) une instance en Java où l'interface n'a pas besoin de méthodes (sérialisables) et n'a donc aucune. Moins de méthodes, facilite définitivement la mise en œuvre de l'interface mais peut toujours fournir une abstraction très utile. Il existe un certain nombre d'interfaces avec une méthode.


0 commentaires

4
votes

Je serais plus préoccupé par le fait que l'interface est logiquement cohérente qu'il n'a qu'un nombre optimal arbitraire de méthodes. Cela dit, un grand nombre de méthodes pourrait indiquer un objet "dieu", qui devrait être refacturé. L'indication plus claire est que les méthodes ne sont pas cohérentes, mais le nombre de méthodes pourrait être plus facile à observer et vous amener à un examen plus approfondi. Parfois, cependant, vous devez simplement avoir beaucoup de méthodes car il y a beaucoup d'opérations possibles que vous aimeriez faire sur des objets de ce type. Un exemple de ce serait quelque chose comme iEnumerable in .NET. Je ne peux penser à aucune raison valide de casser ceux-ci dans des interfaces distinctes, mais il y a beaucoup de méthodes dans l'interface.


0 commentaires

3
votes

Il y a NO Nombre optimal de méthodes dans une interface. Les interfaces sont utilisées pour toutes sortes de choses différentes et ce qui est approprié dépend entièrement de quoi.

sur une extrême, une interface peut être automatiquement générée par un programme de consommation par un autre programme et pourrait pour une bonne raison d'y avoir 1 000 méthodes.

Pour le code lisible par les humains, les règles ne peuvent substituer au jugement.


0 commentaires

0
votes

Ces vingt méthodes soit capturent quelque chose d'utile ensemble ou non. S'ils le font, alors vous devez mettre en œuvre tous pour fournir une implémentation à cette chose qu'ils capturent. Il sera cohérent pour les abriter dans la même interface dans ce cas.


0 commentaires

1
votes

Il n'y a pas de bonne ou mauvaise réponse au nombre de méthodes acceptables pour une interface à avoir. Certains peuvent avoir zéro, d'autres un, et probablement très peu de personnes dépasseront jamais cent. La plus grande interface que j'ai écrite était de près de trente méthodes, mais c'était une façade pour les clients.

Cependant, je penserais qu'une interface qui avait plus que dire 8-10 méthodes serait une fumée de code possible - juste quelque chose qui justifierait 5 secondes pour enquêter.


0 commentaires

2
votes

0 commentaires