构建POJO时应该传入还是生成UUID?

Should UUID be passed in or generated on construction of POJO?

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

如果您将其中一个字段设置为 UUID 值,是否可以接受在构建时生成和设置?还是应该通过构造函数传入?

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

出于您已经概述的原因,我肯定会有一个接受 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,这对于测试来说足够宽容(如果你碰巧需要它),并且只留下一种公开可见的方式来创建 class.