2013-11-24 18 views
3

我們把實體放在一個域包中。像com.acme.domain或com.acme.model。將枚舉放在Java項目中的位置?

實體通常具有表示代碼的屬性,而不是自由形式的字符串。類似於排序代碼(ASC或DESC)或發佈狀態代碼(DRAFT,提交,發佈)。我爲這些創建枚舉,所以我可以在「業務邏輯」中做出決定。

問題是:我們在哪裏放這些枚舉?與實體或com.acme.domain.support等不同軟件包相同的軟件包?

當你提供一個答案時,請解釋你爲什麼會把枚舉放在一個包裏。

+3

只要你(和你的隊友)一直這樣做,我不相信它真的很重要。 –

+1

他們是你的域名的一部分,不是? (儘管如此,我認爲你已經在分析它了。) – Jeremy

+1

順便說一句,唯一正確的答案是「在類路徑上」;-) – Jeremy

回答

3

在我工作的項目中,我們定義了一個「types」包,並將我們的枚舉放置在我們的核心域模型實體附近。這些類型在某些情況下相互引用,並且可以獨立使用,也可以與域實體一起使用,所以儘管我更喜歡它們位於核心域模型的包中,但它確實允許核心域模型包不要變得太大(類型包有很多枚舉)。

例如,給定 com.companyname.core.domain.model

我們也將有一個 com.companyname.core.domain.types

包,用於核心域類型。

「類型」的原因是我們會將枚舉後綴爲「Type」,以便立即明顯地發現它實際上是一個表示特定類型特徵的枚舉。這有助於Eclipse的類型搜索(可能還有其他IDE),但我想其他人會聲明追加類型是多餘的,因爲包名稱。

我們還在類型包中包含了ORM映射類,用於轉換爲數據庫表示(從類型使用內部整數代碼而不是序號)來表示它們 - 以防有人重新排列它們或常量不再存在需要並應該刪除)。

+0

範,感謝您的信息,但請回答我問的問題。它只是模型包的大小,使您使用類型的domain.types包? – jacekn

+0

非常。而且,在枚舉的性質上,它們在模型更加充實之前更容易定義,因此在模型類創建之前定義了許多類型。 – MetroidFan2002

0

普查員在哪裏取決於他們必須在項目中使用的地方。

一些用例:

  1. 如果我們需要對這些枚舉跨系統和跨多個服務使用,然後我們就可以把它們無論是在我們的clientsdomains這是由被共享的模塊。
  2. 如果我們需要在我們自己的服務環境中使用枚舉,那麼我們應該把它放在我們的服務包/模塊中。

所以,最重要的規則是,我們不應該共享資源或將資源共享的模塊/包這是任何使用客戶端或服務這是用我們的共享資源的不。