强制开发人员使用Builder构建实例

时间:2012-10-10 13:28:23

标签: java design-patterns orm builder

我有一些POJOs要遵守某些规则。 A 类型的 ObjectA 的状态取决于 B 类型的 ObjectB 的状态。在这种情况下,我使用构建器在 ObjectA 上强制执行 ObjectB 的规则。

构建器 ObjectA 时,构建器负责执行所有验证,抛出异常并执行检查。这不是问题。我希望将来的开发人员使用构建器实例化和操作类型 A 。我该如何强制执行此操作?

以下是我的一些选择,这是最佳方向:

  1. 文档,如果开发人员没有阅读文档,那就不那么有效了,除非可以做某事,否则有人会这样做。
  2. 将验证移至POJO,但我使用 ORM ,并且很少在设置属性时抛出错误。
  3. 您对此问题的看法。

4 个答案:

答案 0 :(得分:2)

使用静态内部构建器。

或者使构造函数受到保护,并将构建器放在具有公共接口的相同包中

答案 1 :(得分:1)

我认为鉴于这些是POJO,使得构造函数小于公共不是一个选项,因为这会导致ORM的问题?

如果构造函数非公共的可能性,您可以使构建器成为POJO类的静态子类,并使构造函数成为私有,从而防止其他人直接实例化POJO。

但是你应该能够至少使用@Deprecated注释来提供使用POJO构造函数的警告。然后,您可以在执行实例化的Builder方法上使用@SuppressWarnings("deprecation")来获得干净的构建。

答案 2 :(得分:1)

确保无法直接调用A类的构造函数。将其设为private并将构建器创建为可以访问构造函数的静态内部类。然后(可选)在A方法中创建

public static Builder builder() {
    return new Builder();
}

以方便的方式访问构建器。您还可以将外部依赖项(如B)传递给此方法。

答案 3 :(得分:1)

BuilderObjectAObjectB放在同一个包中。然后使ObjectAObjectB的构造函数受到保护。这样,构建器是唯一可以创建它们的构建器。