2011-07-11 7 views
10

パッケージAがある外部ソースのデータとパッケージBを別のソースから処理するようにアプリケーションを分割しました。どちらの場合も、ドメインオブジェクトを作成し、これを行うために「トランスフォーマ」を用意する必要があります。同じ名前の2つのクラスを異なるパッケージに入れるのは悪いことですか?

だから私はcom.foo.bar.a.ThingTransformercom.foo.bar.b.ThingTransformer

私はこれが悪い習慣があると思われるが、SOの良い人々が何を考えて見たいと思っています。

答えて

15

私はそれが常に悪い習慣であると言っていないが、それは幾分かcode smellだと言います。

場合、両方のクラスは、なぜ彼らは、異なる名前を異なるものを持っていないのですか?

場合、両方のクラスは、なぜ2つのクラスが同じものがあるのですか?

これら2つのクラスがこれまでと同じクラスで参照する必要がある場合には実用的な観点からは、非常迷惑になることができます:あなたはそれらのいずれかのFQNを使用する必要があります(それはおそらくそれを使用するのがベストだろうこの場合はどちらも明瞭にするために)。これらの2つのクラスがコードの十分に異なる部分にあり、同じコードから参照されない場合、実際の問題はそれほど悪くはありません。

+0

のようなもの、私はそのパターンがすべて終わったプロジェクトを維持しています。同じ名前の複数のクラス。異なるフォルダにあります。時には私はそれを担当している人を追いかけるような気がします。 – Mirko

3

同じコードで両方のクラスを一緒に使用することはほとんどありません。すべてのクラス名でa/b区別をパッケージから複製すると悪化します。

+2

+1は単純な名前に名前のスペース情報を複製しないためです! –

5

多くのドメインで同様の用語が使用されているように、実際には貧弱な方法であるため、同じ名前を持つことになります。一方、両方が同じドメインにあり、単に異なる実装である場合は、実装の詳細をその名前に(何らかの形で)示すことができます。
同じソースファイルで両方を使用する必要がある場合は非常に醜いです。この場合は、少なくとも1つの完全修飾名を使用する必要があります。

例:

java.util.List java.awt.List

名での実装を示しています
java.util.ArrayList
java.util.LinkedList

+0

+1は、異なるドメインの用語が似ている点を浮き彫りにしています。例えば、 LuceneにはDocumentクラスがあり、これは別のAPIで簡単に表示できる名前だと確信しています。 – lightalchemist

5

それは結構です。これはまさに設計上、異なるパッケージが異なる名前空間を持つ理由です。

1

これがもっと役に立つか混乱するかを判断する必要があります。違いが明確でない同じパッケージ内の類似の名前を使用すると、同じ問題が発生する可能性があります。

より-混乱-より-役立つの例は

com.sun.corba.se.internal.Interceptors.PIORB extends 
com.sun.corba.se.internal.POA.POAORB which extends 
com.sun.corba.se.internal.iiop.ORB which extends  
com.sun.corba.se.impl.orb.ORBImpl which extends 
com.sun.corba.se.spi.orb.ORB which extends  
com.sun.corba.se.org.omg.CORBA.ORB which extends 
org.omg.CORBA_2_3.ORB which extends 
org.omg.CORBA.ORB 
関連する問題