Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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类添加新字段还是向新DTO类添加新字段更好?_Java_Dto - Fatal编程技术网

Java 向现有DTO类添加新字段还是向新DTO类添加新字段更好?

Java 向现有DTO类添加新字段还是向新DTO类添加新字段更好?,java,dto,Java,Dto,这可能是一个一般的java问题 DTO1 属性1 属性2 属性3 DTO2 属性1 属性2 属性3 属性4 属性5 属性6 属性7 属性8 属性9 属性10 属性11 属性12 我将在屏幕上的gxt网格中显示一些值列表。这些值只是DTO1类的列表,其中我有3个字符串,我将从服务调用中获得这些字符串。现在我需要以类似的方式显示12个不同的字段,但基于一个条件(这次我不会显示DTO1) 使用这12个字段创建一个新的DTO2类,或者将这12个字段添加到现有的DTO1类中,这样我就不必再创建一个新的DT

这可能是一个一般的java问题

DTO1

  • 属性1
  • 属性2
  • 属性3
  • DTO2

  • 属性1
  • 属性2
  • 属性3
  • 属性4
  • 属性5
  • 属性6
  • 属性7
  • 属性8
  • 属性9
  • 属性10
  • 属性11
  • 属性12
  • 我将在屏幕上的gxt网格中显示一些值列表。这些值只是DTO1类的列表,其中我有3个字符串,我将从服务调用中获得这些字符串。现在我需要以类似的方式显示12个不同的字段,但基于一个条件(这次我不会显示DTO1)

    使用这12个字段创建一个新的DTO2类,或者将这12个字段添加到现有的DTO1类中,这样我就不必再创建一个新的DTO2类了,这样(性能方面)更好吗

    案例1。向现有DTO类添加了额外字段
    每次我只为3个属性而不是新添加的12个属性使用DTO类时,会不会有额外的空间

    案例2。创建了新的DTO2类
    是否可以通过将这12个字段添加到DTO1(如案例1所示)来补偿创建的额外空间


    了解一下哪种方法可以提高性能?

    我真的不担心性能,因为我不相信上述方法之间存在合理的差异。我宁愿考虑最好的设计实践,这将允许您在将来需要添加/编辑字段时维护应用程序。我认为只有你需要的才有一个单独的dto在这里是最好的。如果每个dto都使用可以放入父类的相同基本字段,并将其余字段添加到子类中,则也可以使用继承。例如,属性1、2、3在父类上,其余在子类上。

    如果DTO2的12个属性中有3个与DTO1的类型相同,那么您肯定应该使用继承:

    class DTO1{
    
        private String attribute1;
        private String attribute2;
        private String attribute3;
    
        //getters and setters
    }
    
    class DTO2 extends DTO1{
    
         private String attribute4;
        //other attributes
    }
    
    在需要全部12个属性的地方使用DTO2,在只需要3个属性的地方使用DTO1

    如果DTO2至少没有3个与DTO1类型相同的属性,则应创建一个新的单独DTO2类。将所有12个属性添加到DTO1并只使用其中3个属性没有任何意义,因为当您创建DTO1实例时,JVM将为所有12个属性分配内存,即使您没有初始化其他9个属性(每个引用将占用4/8字节,具体取决于JVM正在运行的机器)

    当然,多几个字节是无关紧要的,除非您处理数百万个DTO。但是,如果我们考虑到设计,以及未来的需要,你将需要多种类型的DTOs,你不应该只依赖一种类型的DTO来完成你的工作。
    至于DTO2字段添加的额外空间,没有办法。如果需要12个属性,则必须为它们分配内存,因此这里没有问题。

    虽然这两种方法在技术上都是正确的,但出于以下原因,我更倾向于创建新的DTO,而不是添加更多字段:

  • 它使代码更容易阅读:再加上良好的命名,一个额外的DTO会让您的继任者在第一眼就不那么头疼
  • 类应该只有一个更改的原因:用不相关的字段混淆DTO会给该类将来更改的几个原因,使其成为不相关依赖项的失败源
  • 额外的类不会影响您的应用程序

  • 为什么DTO2不能扩展DTO1?所以你只把属性4改为12谢谢丹尼尔,我现在明白了。