是否应该在建造POJO时传递或生成UUID?

时间:2016-01-31 19:18:04

标签: java dependency-injection uuid

在创建POJO时,不好的做法是在构造函数中设置任何属性,而不是因为依赖注入而将它们传入。

如果要将其中一个字段设置为UUID值,是否可以生成并在构造时设置?或者它应该通过构造函数传递?

或者是否有用于此的一般模式?

1 个答案:

答案 0 :(得分:3)

我肯定会有一个接受UUID的构造函数,因为你已经概述了。 (并测试。)

但是,我还要添加一个静态工厂方法,该方法只接受您在常规代码中外部设置的值。所以像这样:

public class Foo {
    private final UUID id;
    private final Bar bar;

    Foo(UUID id, Bar bar) {
      this.id = id;
      this.bar = bar;
    }

    public static Foo create(Bar bar) {
        return new Foo(UUID.randomUUID(), bar);
    }
 }

我将构造函数指定为package-private,它足以允许进行测试(如果您碰巧需要它),并且只留下一种公开可见的方式来创建类的实例。