8
votes

Est-ce une mauvaise pratique de «mélanger la classe et les interfaces dans le même paquet»?

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 "

Je me demande, s'il ya des raisons de séparer les interfaces et les implémentations en Java.

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?

Cordialement
Mike
[; -)


0 commentaires

4 Réponses :


4
votes

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


0 commentaires

8
votes

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.

Pour les interfaces qui ne sont que en interne, mais ce n'est pas un problème de tout garder dans un paquet.


0 commentaires

11
votes

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.

Je ne suis pas d'accord avec le libellé "mauvaise pratique". C'est trop fort.

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".


0 commentaires

9
votes

raisons de maintenir les interfaces et la mise en œuvre dans des packages séparés:

CLEAR CODE BASE - Il "semble" mieux, Tadiier si nous avons un paquet avec des interfaces et une autre avec des implémentations (généralement un espace de noms ". Et la structure de code montre / reflète que vous codez contre des interfaces.

modificateurs d'accès - 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.

Structure de la bibliothèque - 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.


1 commentaires

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é?