strawmanパッケージと見なしてくださいJava.util
これは、ほとんどの場合に行われないさまざまなクラスのダンプグラウンドですそこにそれらを置いた人以外に、クラスのより意味的に正しいパッケージ名を思い付くのが面倒だったり、刺激を受けていなかったりすること以外は、すべての共通点を共有してください。
ほんの一例として、クラスUUID
を例に取ると、そのクラスの意味的に正しいパッケージ名は何でしょうか。
自分のUUID
クラスを実装して軽量化を図っています。パッケージ名にme.myproject.util.UUID
を使用したくありません。
私はme.myproject.rfc4122.UUID
を検討しましたが、これはUUID
の使用の意味を意味するものではありません。
私もme.myproject.uuid.UUID
を検討しましたが、Pythonで同じ名前のモジュールにクラスを配置し、packages
を使用するのは一般的なアプローチですが、トートロジーは好きではありませんJavaは、Pythonのmodules
と意味的に同等ではありません。
me.myproject.UUID
も検討しましたが、名前空間のその部分を関連のないもので汚染したくないので、拒否しました。これは問題をレベルを上げるだけです。
私はme.myproject.lib.UUID
も検討しましたが、これは.util
ほど意味的な意味はなく、問題の名前を変更するだけです。
semantics
:meaningに関連する言語学と論理の分岐。
そのクラスの意味的に正しい名前を持つパッケージに各クラスを配置しようとすることの問題は、非常に少数のクラス、または場合によっては1つのクラスだけを含むパッケージにつながる傾向があることです。これにより、多数のパッケージが作成されます。
パッケージのネーミングに対するより実用的なアプローチは、単に物を見つけるのを助けることです。頻繁に使用するものを1か所にまとめて見つける場所を常に把握しておくと、邪魔にならず、使用頻度の低いものを見つけやすくなります。そのため、クラスに含まれるクラスのそれぞれに対して意味的に正しいパッケージ名は実際には必要ありません。意味的に正しくないパッケージ名が必要です。明らかに、「util」パッケージ名は、この考え方に従って選択されました。これは、含まれるクラスのthe意味的に正しい名前ではありませんが、意味的に正しくなくても十分です。
したがって、あなたのこのUUIDタイプがこの特定のアプリケーションでのみ使用される予定である場合( 'myproject'の下に配置することを計画しているという事実によって証明されます)、おそらくそれはあなたの 'モデル'の一部です事業。永続エンティティに対応するすべてのクラスのセットを含む「モデル」パッケージがすでにあるはずです。それらの多くはおそらくそれらの間に関係があり、UUIDはおそらくこれらの関係を実装する手段です。また、あなたのUUIDはおそらく自分自身を持続させる方法を知っていますよね?また、UUIDはモデルエンティティのメンバーとしてしか見つからないでしょう。したがって、モデルパッケージはおそらく最適な場所です。
それ以外の場合、このUUIDタイプが他のプロジェクトでも使用される可能性がある場合は、いくつかのフレームワークの一部と見なす必要があります。したがって、そのフレームワークのルートソースフォルダー、またはMainMaが提案する「types」サブパッケージ、または「util」または「misc」と呼ばれるそのフレームワークのサブパッケージに存在する可能性があります。何も問題ありません。
ボブおじさんはパッケージ分離に関して いくつかのガイドライン を持っています。
最初の3つのパッケージ原則はパッケージの凝集性に関するものであり、パッケージ内に何を配置するかを示しています。
だから、あなたの質問に答えて、誰/何がuseUUIDクラスに行くのか、それを属性として持っているのか、その中に操作を呼び出すのですか? ディペンデンシーグラフ はどうですか? UUIDは他のクラスと一緒に使用されますか?
答えによっては、me.myproject.identityパッケージ、me.myproject.serializationパッケージ、 me.myproject . [〜#〜] dto [〜#〜]または完全に別のもの。おそらく、UUIDクラスはモデルと一緒に保持する必要があり、me.myproject.modelsのように、すでに持っているパッケージに入れます。
パッケージの目的は、いくつかの基準に従ってクラスをグループ化することです(タイプ/レイヤーごとのパッケージと機能ごとのパッケージなど)。私は実際には1つのクラスだけのパッケージを作成するポイントはないと思います。特に、将来このパッケージに他のクラスが存在することを期待していない場合はなおさらです。
また、「util」パッケージ名は完全に無意味ではないと思います-それは特定の基準によってクラスをグループ化するだけです-私にとって「util」クラスはそれがアプリケーションのドメインの一部ではないことを意味しますが、それはまたの一部ではありませんフレームワーク(アプリケーションの構造には影響しません)。これは基本的に、(非)標準ライブラリの単なる拡張です。
この場合、このUUIDクラスを「util」パッケージに配置しても問題はありません。他のUUID関連のユーティリティクラス(UUIDを生成するための個別のクラスなど)がある場合、リファクタリングしてそれらの「util.uuid」パッケージを作成するのは簡単です(ライブラリを作成していて、UUIDが公開されたインターフェイスの一部でない限り) 、それからあなたは少し「前向きに考える」必要があります)。