将枚举放在Java项目中的位置?

时间:2013-11-24 04:02:35

标签: java domain-model

我们将实体放在域包中。像com.acme.domain或com.acme.model之类的东西。

实体通常具有代表代码的属性,而不是自由格式字符串。类似于排序顺序代码(ASC或DESC)或发布状态代码(DRAFT,SUBMITTED,PUBLISHED)。我为这些创建了枚举,所以我可以在“业务逻辑”中做出决定。

问题是:我们把这些枚举放在哪里?与实体相同的包或不同的包,如com.acme.domain.support?

当您提供答案时,请解释为什么要将enum放在一个包中而不是另一个包中。

2 个答案:

答案 0 :(得分:3)

在我正在工作的项目中,我们定义了一个“类型”包,并将我们的枚举放在核心域模型实体附近。这些类型在某些情况下彼此引用,并且可以单独使用以及与域实体一起使用,因此虽然我希望它们位于核心域模型的包中,但它确实允许核心域模型包不要变得太大(类型包有很多枚举)。

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

我们也有一个 com.companyname.core.domain.types

用于核心域类型的包。

“类型”的原因是我们将使用“类型”对枚举进行后缀,以便很明显它实际上是一个表示特定类型特征的枚举。这有助于Eclipse的类型搜索(可能还有其他IDE),尽管我认为其他人会声明附加类型在包名称时是多余的。

我们还在types包中包含ORM映射类以转换为数据库表示形式(使用内部整数代码而不是序数表示它们的类型)以表示它们 - 以防有人重新排列它们或不再需要常量并应删除)。

答案 1 :(得分:0)

放置枚举器的位置取决于项目中必须使用的位置。

一些用例:

  1. 如果我们需要跨系统和多个服务使用这些枚举,那么我们可以将它们放在我们的clientsdomains中,这些是要共享的模块。
  2. 如果我们需要在我们自己的服务上下文中使用枚举,那么我们应该将它放在我们的服务包/模块中。
  3. 因此,基本规则是我们永远不应该共享资源或将资源放在对客户端或使用我们共享资源的服务没有任何用处的可共享模块/包中。