2013-11-24 23 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. 如果我们需要在我们自己的服务环境中使用枚举,那么我们应该把它放在我们的服务包/模块中。

所以,最重要的规则是,我们不应该共享资源或将资源共享的模块/包这是任何使用客户端或服务这是用我们的共享资源的不。