我们已经拆分了我们的应用程序,以便程序包A处理来自一个外部源和来自另一个外部源的数据包。在这两种情况下,我们都需要创建一个域对象并使用“Transformer”来执行此操作。
所以我有com.foo.bar.a.ThingTransformer
和com.foo.bar.b.ThingTransformer
我怀疑这是不好的做法,但想看看SO的优秀人才。
答案 0 :(得分:17)
我不会说它总是一种不好的做法,但它有点像code smell。
如果两个类都有不同的东西,那么为什么他们的名字不同?
如果两个类都相同的东西,那么为什么有两个类呢?
从实际的角度来看,如果这两个类需要在同一个类中引用,它可能会变得非常烦人:你必须使用FQN作为其中一个类(在这种情况下,为了清楚起见,最好将它用于两者。如果这两个类在代码的相当不同的部分中不会从相同的代码中引用,那么实际问题就不那么糟了。
答案 1 :(得分:7)
并非真正糟糕的做法,因为在许多领域都有类似的术语,所以你最终会有相同的名字。另一方面,如果两者都在同一个域中,但只是不同的实现,您可以(以某种方式)在名称中指明实现细节。
非常难看的是如果你必须在同一个源文件中使用它们,在这种情况下你必须使用至少一个完全限定名称。
示例:
java.util.List
java.awt.List
表示名称的实施:
java.util.ArrayList
java.util.LinkedList
答案 2 :(得分:5)
没关系。这正是设计上不同包具有不同命名空间的原因。
答案 3 :(得分:3)
没有错,因为你不太可能在同一个代码中同时使用这两个类。在所有类名中复制a / b与包的区别会更糟。
答案 4 :(得分: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