Je viens de trouver quelque chose que je n'ai jamais entendu parler avant et que je ne suis pas d'accord avec (maintenant). Dans un (avié et non plus avancé) Réponse j'ai lu "Pourquoi mélanger classe et interfaces dans le même package " p>
Je me demande, s'il ya des raisons de séparer les interfaces et les implémentations en Java. em> p>
Je sais que nous ne sommes pas obligés de disposer de toutes les implémentations dans l'emballage de l'interface, mais c'est (parfois) sage d'avoir rien là-bas? P>
Cordialement
Mike
[; -) p>
4 Réponses :
Ce n'est pas une mauvaise chose, mais c'est certainement une bonne pratique pour séparer l'interface et la mise en œuvre dans différents packages.
Par exemple P>
com.mycompany.domain.service com.mycompany.domain.service.impl
Pour Osgi, il est presque nécessaire d'utiliser des packages distincts AFaik afin que vous puissiez exporter / importer l'API sans exporter / importer la mise en œuvre. p>
Pour les interfaces qui ne sont que en interne, mais ce n'est pas un problème de tout garder dans un paquet. P>
Je suis d'accord avec org.life.java - j'aurai un service et un service sous-jacent. Les packages minimaux, mais toujours dans ce type d'arrangement. P>
Je ne suis pas d'accord avec le libellé "mauvaise pratique". C'est trop fort. P>
Les collections Java.Utils L'API confit avec ce conseil. Je ne voudrais pas être celui pour dire à Joshua Bloch qu'il avait fait un "mauvais travail". P>
raisons de maintenir les interfaces et la mise en œuvre dans des packages séparés: p>
modificateurs d'accès strong> - Nous pouvons utiliser des modificateurs d'accès privés de paquet pour un package API privé pour les implémentations d'interface associées. P>
Structure de la bibliothèque forte> - Peut-être un jour que vous décidez de créer différentes bibliothèques pour API (interfaces) et implémentation (s). Ensuite, il est plutôt bon d'avoir des interfaces et des implémentations dans différents packages. Vous pouvez donc changer la construction sans refactoriser votre base de code. P>
Je ne trouve que le troisième point pertinent. Je ne comprends pas votre deuxième point. Quelle est la bonne interface privée de paquet, si vos implémentations sont dans un package séparé?