次のことに対して、 `util`よりも意味的に適切なパッケージ名は?


18

以下のようstrawmanはパッケージを検討しjava.util、ほとんどの場合、自分のクラスのためのより多くの意味的に正しいパッケージ名を思い付くことが怠惰や平凡だったそれらを置く人よりも一般的な他でシェアは何もないことをする様々なクラスのゴミ捨て場です。

ほんの一例として、そのクラスUUIDの意味的に正しいパッケージ名だったクラスを取り上げますか?

私は自分のUUIDクラスをより軽量にするために実装しています。me.myproject.util.UUIDパッケージ名に使用したくありません。

私は考えましたme.myproject.rfc4122.UUIDが、それはの使用の意味を意味しませんUUID

私も考慮しましたme.myproject.uuid.UUIDが、トートロジーは好きではありません。同じ名前のモジュールにクラスを置くのはPythonでは一般的なアプローチですがpackages、Java modulesではPythonと意味的に同等ではありません。

またme.myproject.UUID、名前空間のその部分を関連しないもので汚染したくないので、それを検討しましたが、拒否しました。これにより、問題が1つ上のレベルに移動します。

私も考えましたme.myproject.lib.UUIDが、これはセマンティックな意味を持たず.util、問題の名前を変更するだけです。

semantics意味に関係する言語学と論理の分岐。


どうme.myproject.UUID?またはme.UUID
ロバートハーベイ

私には、そのようなものfrom me.myproject.uuid import UUID, GetUUIDInfoはOKに見えます。モジュールには、エクスポートされたものが複数ある場合があります。
9000

2
JXTAには、IDを処理するための「ID」パッケージがあります。
greg-449

@ greg-449-私はあなたの提案に傾いているidentityidentifiers、おそらく受け入れられる答えとしてもう少し説明を付けます。

回答:


11

そのクラスの意味的に正しい名前を持つパッケージに各クラスを配置しようとすることの問題は、非常に少数のクラス、または時には1つのクラスしか含まないパッケージにつながる傾向があることです。これにより、多数のパッケージが作成されます。

パッケージの命名に対するより実用的なアプローチは、単に物を見つけるのを助けることです。頻繁に使用されるものを常に1か所にまとめて見つけることができる場所を知っていると、それらが邪魔にならないので、めったに使用されないものを見つけやすくなります。したがって、含まれるクラスごとに意味的に正しいパッケージ名は実際には必要ありません。意味的に間違っていないパッケージ名だけが必要です。明らかに、「utilの」パッケージ名は、思考のこのラインに従って選択した:それはない、それは含まれていたクラスの意味的に正しい名前が、それはまた、意味的に間違っていない、そしてそれは良い十分です。

したがって、このUUIDタイプがこの特定のアプリケーションでのみ使用されることになっている場合(「myproject」の下に置くことを計画しているという事実によって証明されるように)、それはおそらくあなたの「モデル」の一部です事業。永続エンティティに対応するすべてのクラスのセットを含む「モデル」パッケージがすでにあるはずです。その多くはおそらくそれらの間に関係があり、UUIDはおそらくこれらの関係を実装する手段です。また、UUIDはおそらく自分自身を永続化する方法を知っていますか?また、UUIDはおそらくモデルエンティティのメンバーとしてのみ見つけることができますよね?そのため、おそらくモデルパッケージが最適な場所です。

それ以外の場合、このUUIDタイプが他のプロジェクトでも使用される可能性がある場合は、何らかのフレームワークの一部として見る必要があります。そのため、そのフレームワークのルートソースフォルダー、MainMaが示唆した「タイプ」サブパッケージ、または「util」または「misc」と呼ばれるそのフレームワークのサブパッケージに存在する場合があります。それについて何も悪いことはありません。


2
回答の有用性に実際には追加されない回答のコメントを制限してください。コメントセクションは、そのような免責事項のために予約されています。ありがとうございました。
maple_shaft

1

パッケージの目的は、いくつかの基準に従ってクラスをグループ化することです(タイプ/レイヤーごとのパッケージと機能ごとのパッケージなど)。特に、将来的にこのパッケージに他のクラスが存在することを期待していない場合は、1つのクラスだけのパッケージを作成するポイントは実際にはありません。

また、「util」パッケージ名は完全に無意味ではないと思います-特定の基準でクラスをグループ化するだけです-私にとって「util」クラスは、アプリケーションのドメインの一部ではないことを意味しますが、フレームワーク(アプリケーションの構造には影響しません)。基本的には、(非)標準ライブラリの単なる拡張です。

この場合、このUUIDクラスを「util」パッケージに入れても問題はありません。他のUUID関連ユーティリティクラス(UUIDを生成するための別のクラスなど)がある場合、それらの「util.uuid」パッケージをリファクタリングおよび作成するのは簡単です(ライブラリを作成し、UUIDが公開インターフェイスの一部になる場合を除く) 、それから少し「前向きに考える」必要があります)。


1
これが私のアプローチです。明確な目的を持っていないパッケージを作成することは意味がありません。クラスを意味のあるパッケージに簡単に割り当てることができない場合は、「util」で十分であり、優先される場合もあります。通常、あなたが進むにつれて起こることは、十分なクラスが関連するutilになり、それらがutilから(少なくとも開発中に)意味のあるパッケージに簡単にリファクタリングできることです。クラスごとに一意のパッケージを作成しようとした場合、どこに行くのかわからない場合、それらの関係や、よりクリーンなアーキテクチャにリファクタリングする機会を簡単に逃す可能性があります。
ダンク

@Dunk、これは実際には非常に良い点です-途中でやや人工的なパッケージ構造を作成すると、途中でより良い、より自然な組織を見ることができなくなります。
-qbd

1

ボブおじさんには、パッケージの分離に関するガイドラインがあります。

パッケージの最初の3つの原則は、パッケージの凝集性に関するもので、パッケージ内に何を配置するかを示しています。

  1. 再利用の顆粒は放出の顆粒です
  2. 一緒に変化するクラスは一緒にパッケージ化されます
  3. 一緒に使用されるクラスは一緒にパッケージ化されます

だから、あなたの質問に答えて、誰/何がUUIDクラスを使用するのか、それを属性として持っているか、その中で操作を呼び出しますか?依存関係グラフはどうですか?UUIDは他のどのクラスと一緒に使用されますか?

あなたの答えによっては、多分あなたはそれを呼び出す必要がありme.myproject.identityのパッケージ、me.myproject.serializationのパッケージ、me.myproject。DTOまたは完全に他の何か。たぶん、UUIDクラスはモデルと一緒に保管する必要があり、me.myproject.modelsのように、すでに持っているパッケージに入れます。


1
dtoは、libまたはのようにセマンティックに無用です。コンセプトutils全体dtoは90年代半ばからの素朴なアンチパターンでありmodel、同じ無用の一般化カテゴリにも分類されます

私たちはあなたのより便利な名前を与えるためにあなたのプロジェクトについて十分に知っているドント
HBAを

-2

まず第一に、UUID(大文字)は、パッケージ名またはクラス名について非常に悪い考えのように思えます。何らかの方法で強制されるすべてのスタイルから、すべての大文字の名前は「定数」に関連付けられます。パッケージはものを整理することを目的としています。パッケージに名前を付ける最も簡単な方法は、保持するクラスの値によるものです。

  • たとえば、bussinesの値でクラスを分離することもできますcom.example.identifier
  • またはその技術的価値によって、例えばcom.example.uuid

ITをシンプルに保つ


2
JavaでALLCAPSクラスの例としては:java.util.UUIDjava.net.URLjava.util.zip.CRC32、など
scriptin

@scriptin開発者にとっては、「定数」のクラス、パッケージ名のメンバーなどのキャップスタイルと区別することができれば、開発者にとっては簡単ではないでしょうか。なぜあなたはCRC32、UUIDがクラスの良い名前だと思いますか、それはJavaがそうしたからというだけの理由ですか?または、「Universally Unique Identifier」または「Cyclic Redundancy Check」の頭字語であるため...少しお待ちください!このjava.util.zip.GZIPOutputStreamクラスとは何ですか?GZIP...の略です? there is also a java.util.zip.ZipOutputStream`
Tiberiu C.

1
クラスは型であり、定数は値であり、混乱はありません。これらの名前は良いとか悪いとは思わない。あなたが話している(コーディング)スタイルは、クラスに小文字を強制しないことを指摘しているだけです。Python UUIDでも大文字です。
scriptin

毎日コードを表示/保持する場合、そのスタイルは「読みやすい」フィエスタと「前後に進む」フィエスタの違いを生みます。キャップ、メンバーのタイプ(クラス、定数、パッケージなど)は、頭字語であるという事実よりも。
ティベリウC.

1
元の質問は、パッケージ名を書くときに使用する大文字小文字とは何の関係もありませんでした。意味的に UUIDは、Uuid、uuid、UuId、UuID、または「最高」と思われるその他の任意の大文字化スキームと何も変わりません。
ブランディン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.