簡體   English   中英

在不同的包中有兩個同名的類的壞習慣?

[英]Bad practice to have two classes of the same name in different packages?

我們已經拆分了我們的應用程序,以便 package A 處理來自一個外部源的數據,而 package B 來自另一個源。 在這兩種情況下,我們都需要創建一個域 object 並使用“Transformer”來執行此操作。

所以我有com.foo.bar.a.ThingTransformercom.foo.bar.b.ThingTransformer

我懷疑這是不好的做法,但想看看 SO 的好人是怎么想的。

我不會 go 說這總是一個不好的做法,但它有點代碼味道

如果兩個類做不同的事情,那么為什么它們沒有不同的名字呢?

如果兩個班級都做同樣的事情,那么為什么會有兩個班級?

從實際的角度來看,如果需要在同一個 class 中引用這兩個類,這可能會變得非常煩人:您必須將FQN用於其中一個(在這種情況下,最好將它用於兩個類,為了清楚起見)。 如果這兩個類在代碼的足夠不同的部分中,它們不會被相同的代碼引用,那么實際問題並不是那么糟糕。

不是很糟糕的做法,因為在許多領域都有相似的術語,所以你最終會擁有相同的名字。 另一方面,如果兩者都在同一個域中,但只是不同的實現,您可以(以某種方式)在名稱中指明實現細節。
如果您必須在同一個源文件中同時使用兩者,那么非常難看的事情是,在這種情況下,您必須至少使用一個完全限定的名稱。

例子:

java.util.List java.awt.List

在名稱中指明實現:
java.util.ArrayList
java.util.LinkedList

沒關系。 這正是為什么在設計上,不同的包有不同的命名空間。

這沒什么錯,因為您不太可能在同一代碼中同時使用這兩個類。 在所有 class 名稱中復制與 package 的 a/b 區別會更糟。

您必須決定這是否更有幫助或更令人困惑。 在相同的 package 中使用相似的名稱,您可能會遇到相同的問題,其中區別不明確。

一個比有用的更令人困惑的例子是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM