2009-05-06 6 views
1

Je suis en train de refactoriser un ancien code, en démontant un ancien projet monstre et en le divisant (pour diverses raisons) en sous-projets plus petits. Un projet va finir par contenir principalement des interfaces alors que leurs implémentations associées sont dans un autre projet, et je ne suis pas sûr de la meilleure façon de configurer la structure du paquet.Comment trier des classes associées à partir de différents projets

Dois-je aller pour

org.company.interfaceproject.util.InterfaceClass et
org.company.implementationproject.util.ImplementationClass

ou

org.comp any.project.util.InterfaceClass et
org.company.project.util.ImplementationClass

où la première mise en œuvre a l'avantage de signaler le projet auquel les fichiers appartiennent, tandis que le second sur doesn Pas de mélange dans le fait que les fichiers sont dans des projets différents du tout. Je suppose qu'il n'y a pas de vrai et faux ici, mais je suis curieux de savoir si quelqu'un a des opinions sur le sujet.

+0

Utilisez-vous éclipse? – willcodejavaforfood

+0

En effet, je suis, ce qui pourrait être évident de ma nomenclature =) – mikek

+0

cool. Pourriez-vous me rendre un service et essayer mon plugin de refactoring pour eclipse? http://willcodejavaforfood.com/vu.html – willcodejavaforfood

Répondre

2

Oui, vous devez juste venir avec une convention de nommage. Habituellement, une combinaison des deux a convenu à notre société pour éviter toute ambiguïté.Par exemple, supposons que vous avez eu une interface:

org.company.service.UserService 

Ensuite, nous utiliserions ce qui suit pour la classe de mise en œuvre qui a été câblé par, ou avait, dépendances de printemps:

org.company.service.spring.UserServiceImpl 

Cela a alors le meilleur des deux points de vue:

  1. Vous avez les classes proprement dans un paquet séparé
  2. en utilisant cette convention de nom de classe, il est clair que ses impl un tion de UserService, et encore distinguable même lorsque les deux paquets sont importés.
1

Les deux ont des mérites. Cela dépend en fin de compte de vos intentions pour le projet. Si votre intention est de créer éventuellement des implémentations alternatives des interfaces, il peut être plus judicieux d'utiliser l'option 1. Si ce sera la seule implémentation de l'option 2 d'interfaces serait plus raisonnable.

0

Si vous le pouvez vous devriez mettre les interfaces d'interface dans un plugin/package séparé. Lorsque vous utilisez des interfaces, vous aurez la plupart du temps plus d'une implémentation de cette interface.

Je préférerais l'option 1

1

Sun a Naming conventions. Pour les colis:

Le préfixe d'un nom de package unique est toujours écrit en en minuscules lettres ASCII et devrait être l'un des noms de domaine de premier niveau, actuellement com, edu, gov, mil, net, org, ou l'un des codes anglais à deux lettres identifiant les pays comme spécifié dans la norme ISO 3166, 1981.

Les composants suivants du nom de package varient en fonction des conventions de dénomination internes d'une organisation. De telles conventions peuvent spécifier que certains composants de nom d'annuaire soient des noms de division, de département, de projet, de machine ou de connexion. Donc, je préférerais la deuxième option où vous spécifiez le nom du projet.

Ou je fusionnerais les deux comme ceci:

org.company.project.interfacepackage.util.InterfaceClass and 
org.company.project.implementationpackage.util.ImplementationClass 
0

La plupart du temps d'accord avec Clinton.

En fin de compte, chaque nom de paquet est une île aussi loin que Java est concerné, mais il peut être utile de séparer les choses selon ce qui sera assemblé avec ce au moment de la construction, comme dans:

 
com.foo.client.* 
com.foo.server.* 
com.foo.common.* 

La plupart du temps ce garde vos fichiers de fourmis simples. Notez que cela s'applique même si la disposition des fichiers source est très différente, en raison de la façon dont les choses sont construites ou quoi que ce soit. La seule chose que je dirais est de faire attention de ne pas avoir le même paquet dans plus d'un répertoire source! Cela peut être laid et facile à faire par accident. Donc, à moins que ce genre de pensée ne vous pousse à créer des paquets de haut niveau séparés, j'aime le style de mettre le paquet d'implémentation à l'intérieur du paquet d'interface, donnant un nom au paquet. la mise en œuvre FooImpl. Vous n'avez presque jamais besoin d'importer plusieurs implémentations, mais vous avez parfois besoin d'importer à la fois l'interface et l'impl, et dans ce cas, c'est bien s'ils ont un nom similaire.

Questions connexes