在创建POJO时,不好的做法是在构造函数中设置任何属性,而不是因为依赖注入而将它们传入。
如果要将其中一个字段设置为UUID值,是否可以生成并在构造时设置?或者它应该通过构造函数传递?
或者是否有用于此的一般模式?
答案 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,它足以允许进行测试(如果您碰巧需要它),并且只留下一种公开可见的方式来创建类的实例。