同じ名前のクラスを処理する方法(異なるパッケージ)


9

私と私のR&Dチームは、大規模なコードベースを維持しています。ビジネスロジックを複数のパッケージに分割しました。そのうちのいくつかは持っている同じ名前のクラスを

ご想像のとおり、両方のクラスが同じJavaファイルで参照されている場合、名前は競合します。


例えば:

com.myapp.model (package)
 - Device (class)
 - ...

com.myapp.data (package)
 - Device (class)
 - ...

これらのケースを処理するためのベストプラクティスは何かについて議論があり、次のオプションが考えられました。

最初のオプション

  • クラスの名前を変更し、接頭辞を追加する

    ModelDevice
    DataDevice
    

2番目のオプション

  • 両方が参照されている場合の完全なパッケージ+クラス名の使用

    com.myapp.model.Device
    com.myapp.data.Device
    

コード管理とスケーラビリティの点でより正しいものは何ですか?

現在、両方のアプローチを組み合わせており、矛盾が生じ始めています


それがたまにある場合、それはおそらく問題ではありません-それが繰り返し発生するパターンである場合、クラスが混乱しないように、クラスをより正確に命名します。
アッシリア2016年

あなたは私がどれほど嫌いかjava.util.Date、そしてjava.sql.Date特に- java.sql.Dateのサブクラスでjava.util.Dateあり、データレイヤーからうまく抜け出ている(そしてJSONにうまくシリアライズされない)ので、あなたにはわかりません。

オプション2.1 他が参照されていない場合でも、常に完全修飾名を使用する
Caleth

回答:


16

パッケージ名を使用します。このタイプの問題が、Javaがパッケージ命名規則を使用する理由です。同じ会社の2つのチームであろうと、地球の反対側にある2つのチームであろうと、この種の問題を防ぎます。


1

現在、1つのModelDeviceクラス(モデルパッケージ内のデバイス)があります。異なる分類のために別のそのようなModelDeviceがある場合はどうなりますか?問題は引き続き発生する可能性があり、オーバーヘッドも増加し続けます。

とりあえず、クラスの名前を変更すると役立つ場合がありますが、長期的には、業界標準であるパッケージ名にプレフィックスを付けることをお勧めします。


0

まだ言及されていない1つの側面を追加するだけです。

使用パターン、つまり1つまたは両方のクラスを参照するJavaソースを見てください。

IMHO、ほとんどの場合、ソースファイルは競合するクラスの1つだけを参照する必要があり、コンテキストから、それらがモデルとデータのどちらの世界を処理するかを明確にする必要があります。何らかの理由でそれが難しい場合は、ソースコード内のパッケージ接頭辞付きのクラス名が一般的に嫌われるため、クラスの名前を変更します(読みやすさが低下します)。

両方の世界を扱うソースファイルがある場合、それらは、世界の2つの異なるビュー間を変換する責任を持つクラスをブリッジしている可能性があります。

ただし、1つのソースで両方のDeviceクラスを表示することは、モデルとデータの世界のタスクを混合することにより、ソースが単一責任の原則に違反していることのヒントにもなる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.