Java DTO是否应该包含不同的构造函数?
假设我们有一个DTO,它有24个Long类型的字段(一天中每小时一个字段)。大多数情况下,我们需要DTO的所有字段都为零的实例。我们现在正在做的事情看起来很长:Java DTO是否应该包含不同的构造函数?,java,design-patterns,dto,Java,Design Patterns,Dto,假设我们有一个DTO,它有24个Long类型的字段(一天中每小时一个字段)。大多数情况下,我们需要DTO的所有字段都为零的实例。我们现在正在做的事情看起来很长: MyDTO day1 = new MyDTO(); day1.setQuantityHour1(new Long(0)); day1.setQuantityHour2(new Long(0)); day1.setQuantityHour3(new Long(0)); day1.setQuantityHour4(new Long(0));
MyDTO day1 = new MyDTO();
day1.setQuantityHour1(new Long(0));
day1.setQuantityHour2(new Long(0));
day1.setQuantityHour3(new Long(0));
day1.setQuantityHour4(new Long(0));
...
包含构造函数/工厂方法是否违反DTO模式,该方法已经提供了这样的功能?如果在DTO中使用基元类型
long
,它们将自动初始化为0L。您可以将所有实例变量定义为基元数据类型long。所以,当我们创建对象时,所有变量都将初始化为0。下面给出了示例代码。
软件包org.smarttechie
public class SampleDTO {
private long quantityHour1;
private long quantityHour2;
public long getQuantityHour1() {
return quantityHour1;
}
public void setQuantityHour1(long quantityHour1) {
this.quantityHour1 = quantityHour1;
}
public long getQuantityHour2() {
return quantityHour2;
}
public void setQuantityHour2(long quantityHour2) {
this.quantityHour2 = quantityHour2;
}
}
不,我认为在这种情况下,工厂方法(或者,一般来说,创造性模式)没有任何问题。通常,您需要某种创造性的模式来将对象的构造与其功能/业务逻辑解耦。在您的情况下,作为DTO,您可能没有业务逻辑,但我不认为如果您有一些复杂的构建规则,那么使用创造性模式就不那么合适了。在这种情况下,生成器模式甚至可以工作。如果构造足够简单,就把它放在构造函数中。我知道,但我们需要使用对象。Java 5有自动装箱和取消装箱的概念。因此,您可以互换地使用原语和包装器对象;我对可能来自不同来源的DTO没有任何问题,这些DTO的构造需求略有不同。