3 votes

Les types internes compromettent-ils la bonne conception des API ?

Il me semble que chaque fois que je rencontre des appels ou des types internes, c'est comme si je me heurtais à un obstacle.

Même s'ils sont accessibles dans un code comme celui de l'open-source, on a toujours l'impression qu'ils ne sont pas des parties utilisables du code de l'API lui-même, c'est-à-dire que c'est comme s'il était déconseillé de les modifier.

Faut-il s'interdire d'utiliser le mot-clé interne sauf en cas de nécessité absolue ?

Je demande cela pour une API à code source ouvert. Mais tout le monde ne voudra pas modifier l'API, mais l'utilisera surtout pour écrire son propre code pour l'application elle-même.

12voto

JaredPar Points 333733

Il n'y a rien de mal à avoir un type interne dans votre DLL qui ne fait pas partie de votre API publique. En fait, si vous avez autre chose qu'une DLL triviale, c'est plus probablement un signe de mauvaise conception si vous n'avez pas de type interne (ou au moins un type non public).

Pourquoi ? Les API publiques sont un moyen d'exposer les parties de votre modèle d'objet que vous voulez qu'un consommateur utilise. Avoir une API entièrement composée de types publics signifie que vous voulez que le consommateur puisse voir littéralement tout ce qui se trouve dans votre DLL.

Pensez aux problèmes de versionnage qui vont de pair avec cette position. Changer littéralement n'importe quoi dans votre modèle d'objet est un changement de rupture. Le fait de disposer de types internes vous permet d'avoir une grande flexibilité dans votre modèle tout en évitant les changements cassants pour vos consommateurs.

8voto

Reed Copsey Points 315315

Les types internes sont des types qui sont explicitement destinés à rester en dehors de l'API. Vous ne devez marquer que les éléments internes que vous ne voulez pas que les gens voient.

Je pense que vous rencontrez des types qui sont internes, mais qui auraient été des ajouts précieux à l'API publique. J'ai vu cela dans pas mal de projets. Mais il s'agit d'un problème différent - c'est en fait la même question que celle de savoir si un type privé aurait dû être public.

En général, un bon projet debe ont des types internes ou privés. Ils permettent de mettre en œuvre l'ensemble des fonctionnalités requises sans alourdir l'API publique. Garder l'API publique aussi petite que possible pour fournir l'ensemble des fonctionnalités requises fait partie de ce qui rend une bibliothèque utilisable.

5voto

Andrew Hare Points 159332

Une API est composée de ses types et membres publics, tout le reste est un détail d'implémentation.

Cela étant dit, je pense que les types internes peuvent être très utiles, notamment lorsque vous souhaitez renvoyer des types d'interface à partir de votre API et que vous ne souhaitez pas exposer les types concrets que vous avez utilisés pour mettre en œuvre ces interfaces. Cela donne au concepteur de l'API beaucoup de flexibilité.

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