En tant que épouvantail considérer l'ensemble , java.util
il est un dépotoir pour les différentes catégories qui , dans la plupart des cas ne rien partager dans d' autres communes que la personne qui les placent était paresseux ou sans inspiration pour trouver un nom de package plus sémantiquement approprié pour leur classe.
Pour ne citer qu'un exemple, prenons la classe UUID
ce qui aurait été un nom de package sémantiquement approprié pour cette classe?
Je travaille à la mise en œuvre ma UUID
classe pour être plus léger. Je ne veux pas utiliser me.myproject.util.UUID
mon nom de package.
Je considérais , me.myproject.rfc4122.UUID
mais cela ne signifie pas la sémantique de l'utilisation UUID
.
Je considérais aussi me.myproject.uuid.UUID
mais je ne aimez pas la tautologie que, même si elle est une approche populaire en Python pour placer une classe dans un module du même nom, et packages
en Java ne sont pas sémantiquement équivalents à modules
en Python.
J'ai aussi considéré puis me.myproject.UUID
rejeté parce que je ne veux pas polluer cette partie de l'espace de nom avec des choses qui ne sont pas liées. Cette juste déplace le problème d'un niveau.
Je également considéré , me.myproject.lib.UUID
mais cela n'a pas de sens plus sémantique que .util
et renomme juste le problème.
semantics
: La branche de la linguistique et la logique concernées par un sens .
me.myproject.UUID
? Oume.UUID
from me.myproject.uuid import UUID, GetUUIDInfo
OK de regard. Il pourrait y avoir plus d'une chose exportée dans un module.identity
ouidentifiers
mettre votre proposition avec un peu plus d' explications en guise de réponse , il sera probablement été acceptées.Réponses:
Le problème avec essayer de mettre chaque classe dans un package qui a un nom sémantiquement correct pour cette classe est que cela a tendance à conduire à des packages qui contiennent très peu de classes, ou parfois même une seule classe.
Garder les trucs fréquemment utilisés que vous savez toujours où les rassembler en un seul endroit les garde à l'écart et facilite donc la recherche des trucs les plus rarement utilisés. Ainsi, vous n'avez pas vraiment besoin de noms de packages sémantiquement corrects pour chacune des classes qu'ils contiennent, vous avez juste besoin de noms de packages qui ne sont pas sémantiquement incorrects. Évidemment, le nom du package 'util' a été choisi selon cette ligne de pensée: ce n'est pas le nom sémantiquement correct pour les classes qu'il contient, mais ce n'est pas non plus sémantiquement incorrect, et c'est assez bien.
Donc, si ce type UUID est à toi est destiné à être utilisé uniquement par cette demande spécifique, (comme le prouve le fait que vous envisagez de le mettre sous « myproject »), il est peut-être partie du « modèle » de votre projet. Vous devriez déjà avoir un package « modèle », contenant l'ensemble de toutes les classes qui correspondent à vos entités persistantes, dont beaucoup ont peut-être leurs relations, avec UUID étant peut-être le moyen de mettre en oeuvre ces relations. De plus, votre UUID peut-être Comment savent se persistent, non? Et aussi, votre UUID peut probablement trouver les membres de votre entités modèle, non? Ainsi, votre package modèle est peut-être le meilleur endroit pour elle.
Dans le cas contraire, si ce type UUID de la vôtre peut être utilisé dans d'autres projets aussi, il doit être considéré comme partie d'un cadre. Ainsi, il peut vivre dans le dossier source racine de ce framework, ou dans certains sous-packages 'types' comme l'a suggéré MainMa, ou même dans certains sous-packages de ce framework appelés 'util' ou 'misc'. Aucun problème avec ça.
la source
Le but des packages est de regrouper les classes selon certains critères (package par type / couche vs package par fonctionnalité, etc.).
Je pense aussi que le nom de package « util » est pas totalement dénuée de sens - il seulement les groupes des classes par un critère de spécifiques - pour moi « util » moyen de classe qui ne fait pas partie du domaine de la demande, mais il est pas non plus une partie de la cadre (il n'a pas d'influence la structure de la demande). Il est fondamentalement juste une extension de la bibliothèque standard (non).
Dans ce cas, je ne voudrais pas avoir un problème avec mettre cette classe UUID dans « util » package. If there will be some other UUID-related utility classes (like separate class for generating UUIDs), it's easy to refactor and create "util.uuid" package for them (unless you're creating a library and UUID will be part of exposed interface , alors vous devez être un peu "avant-gardiste").
la source
Oncle Bob a des directives sur la séparation de package.
Les trois principes de premier paquet sont sur la cohésion de package, ils nous disent ce qu'il faut placée à l'intérieur des paquets:
Alors, répondre à votre question, qui / ce qui va utiliser la classe UUID, ont comme un attribut ou invoquer des opérations en elle? Comment est votre graphe de dépendance ? UUID est utilisé avec ce que d' autres classes ?
En fonction de votre réponse, peut - être vous devriez appeler le me.myproject.identity package, le me.myproject.serialization package, me.myproject. DTO ou même quelque chose d' autre. Peut - être, la classe UUID doit être maintenu avec vos modèles et vous mettre dans un ensemble que vous avez déjà, comme me.myproject.models .
la source
dto
est à peu près aussi inutile que sémantiquementlib
ouutils
, tout ledto
concept est un anti-modèle naïf du milieu des années 90,model
tombe dans la même catégorie de généralisation inutile aussi bienTout d'abord, l'UUID (en majuscules) me semble être une très mauvaise idée pour le nom de package ou le nom de classe, de tous les styles appliqués d'une manière ou d'une autre, tous les noms en majuscules sont associés aux "constantes".
com.example.identifier
;com.example.uuid
.Garder les simples IT
la source
java.util.UUID
,java.net.URL
,java.util.zip.CRC32
, etc.java.util.zip.GZIPOutputStream
classe?GZIP
est synonyme de ...? there is also a
java.util.zip.ZipOutputStream`UUID
est également en majuscules.