Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DTO是否应该包含不同的构造函数?_Java_Design Patterns_Dto - Fatal编程技术网

Java 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));

假设我们有一个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));
...

包含构造函数/工厂方法是否违反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的构造需求略有不同。