Quelle stratégie utilisez-vous pour le paquet de nommage en Java projets et pourquoi?

J'ai pensé à cela un certain temps il ya et a récemment refait surface dans ma boutique est en train de faire sa première véritable Java web app.

Comme une intro, je vois deux principaux paquet stratégies de noms. (Pour être clair, je ne suis pas référence à l'ensemble du domaine.de l'entreprise.projet " une partie de cela, je parle de la convention de forfait en dessous.) De toute façon, le paquet de conventions de nommage que je vois sont comme suit:

  1. Fonctionnelle: noms des paquets en fonction de leur fonction à l'architecture plutôt que de leur identité en fonction du domaine de l'entreprise. Un autre terme pour ce qui pourrait être d'appellation en fonction de "couche". Donc, vous devez disposer d'un *.package de l'interface utilisateur et un *.de domaine et un package *.orm paquet. Vos paquets sont des tranches horizontales plutôt que verticales.

    C'est beaucoup de plus commun que la logique de nommage. En fait, je ne crois pas que j'ai jamais vu ou entendu parler d'un projet qui fait cela. Bien sûr, cela me rend réticent à l'idée (un peu comme penser que vous avez trouvé une solution à un problème NP) que je ne suis pas terriblement intelligent et je suppose que tout le monde doit avoir de très bonnes raisons de le faire de la façon dont ils le font. D'autre part, je ne suis pas opposés à des personnes manquant de peu l'éléphant dans la pièce et je n'ai jamais entendu un argument réel pour faire paquet de nommage de cette façon. Il semble juste être la norme de facto.

  2. Logique: noms des paquets en fonction de leur domaine d'affaires de l'identité et de mettre chaque classe qui a à voir avec celle d'une tranche verticale de la fonctionnalité dans ce package.

    Je n'ai jamais vu ou entendu parler de cela, comme je l'ai mentionné avant, mais ça a beaucoup de sens pour moi.

    1. J'ai tendance à l'approche des systèmes verticalement plutôt qu'horizontalement. Je veux poursuivre et de développer le système de Traitement des commandes, pas la couche d'accès aux données. De toute évidence, il ya une bonne chance que je vais toucher la couche d'accès aux données dans le développement de ce système, mais le point est que je ne pense pas de cette façon. Ce que cela signifie, bien sûr, c'est que lorsque je reçois un ordre de modification ou souhaitez mettre en œuvre certaines nouvelle fonctionnalité, il serait agréable de ne pas avoir à aller à la pêche autour de dans un tas de paquets afin de trouver toutes les classes associées. Au lieu de cela, je viens de regarder dans le X paquet parce que ce que je fais a faire avec X.

    2. À partir d'une perspective de développement, je le vois comme une grande victoire d'avoir vos paquets d'un document de votre domaine d'activité, plutôt que de votre architecture. Je me sens comme le domaine est presque toujours la partie du système qui est plus difficile à analyser où, comme l'architecture du système, en particulier en ce point, est en train de devenir banal dans sa mise en œuvre. Le fait que je puisse venir à un système avec ce type de convention de nommage et instantanément à partir de la nomenclature des paquets sais qu'il traite les commandes, les clients, les entreprises, les produits, etc. semble vachement pratique.

    3. Il semble que ceci devrait vous permettre de prendre beaucoup mieux avantage de Java est modificateurs d'accès. Cela vous permet de vous beaucoup plus proprement de définir des interfaces en sous-systèmes, plutôt que dans les couches du système. Donc, si vous avez les ordres du sous-système que vous souhaitez de manière transparente persistant, vous pourriez en théorie seulement de ne jamais laisser tout le monde sait que c'est persistante de ne pas avoir à créer des interfaces publiques pour ses classes de persistance dans la couche dao et au lieu de l'emballage de la classe dao avec seulement les classes, qu'il traite. Évidemment, si vous voulu exposer cette fonctionnalité, vous pouvez fournir une interface ou le rendre public. Il semble juste comme vous perdez beaucoup par avoir une tranche verticale de votre système dispose d'répartir sur plusieurs paquets.

    4. Je suppose un inconvénient que je vois c'est qu'elle permet de faire l'extraction des couches un peu plus difficile. Au lieu de simplement supprimer ou de renommer un paquet, puis en déposant une nouvelle en place avec une autre technologie, rendez-vous dans et de modifier toutes les classes dans tous les forfaits. Cependant, je ne vois pas ce est une grosse affaire. Il peut être d'un manque d'expérience, mais j'ai imaginer le nombre de fois que vous échangez des technologies n'est rien en comparaison de la quantité de fois que vous accédez et modifiez les tranches verticales à l'intérieur de votre système.

Donc je suppose que la question serait alors de sortir de vous, comment faites-vous le nom de vos paquets et pourquoi? S'il vous plaît comprendre que je ne pense pas nécessairement que j'ai trébuché sur la poule aux œufs d'or ou quelque chose ici. Je suis assez nouveau à tout cela, avec la plupart de l'expérience scolaire. Cependant, je ne peux pas repérer les trous dans mon raisonnement, donc je suis en espérant que vous pouvez afin que je puisse passer.

  • Ce que j'ai entendu jusqu'à présent, ce qui semble indiquer que c'est un peu un appel de jugement. Cependant, la plupart des réponses n'ont pas porté sur des considérations pratiques. C'est plus ce que je suis à la recherche pour. Merci pour l'aide si loin, si!
  • Je ne pense pas que c'est un jugement d'appel. D'abord en divisant par couche, puis par la fonctionnalité est certainement le chemin à parcourir. Je suis à jour de ma réponse.
  • dire que pour Eclipse gars 🙂 Dans eclipse, la première division est de "fonctions", qui sont des unités de déploiements et de fonctionnalité. À l'intérieur de "fonctionnalité", il y a des "plugins", qui sont généralement divisés par couche -- mais les plugins dans la même "fonction" doit toujours être déployé à l'ensemble. Si vous avez une seule unité de déploiement, puis en la divisant par la couche d'abord et ensuite seulement par la fonctionnalité peut faire sens. Avec plusieurs unités de déploiement, vous ne voulez pas de simplement déployer couche de présentation -- si vous voulez plus de fonctionnalités.
InformationsquelleAutor Tim Visher | 2009-02-10