一个 DTO 可以扩展另一个 DTO 吗?

问题描述 投票:0回答:2

这更多的是一个理论问题,而不是一个实际问题。

我们有一个分层架构,有点像:

UI <--DTO1--> UI_JavaHandler <--DTO2--> Backend

DTO1 需要比 DTO2 多一点数据,并且恰好是一个额外的字符串。那么问题来了,DTO1应该扩展DTO2还是应该封装DTO2呢?在第一种情况下,UI_JavaHandler 中的代码将是:

public void acceptAction(DTO1 dto1) {
    //do something with dto1.getString();
    backend.call(dto1);
}

而在第二种情况下:

public void acceptAction(DTO1 dto1) {
    //do something with dto1.getString();
    backend.call(dto1.getDto2());
}

扩展 Java DTO2 效果很好,但我不喜欢仅使用扩展来添加新数据的想法。我习惯使用扩展来添加新行为(例如由狗和猫扩展动物)。由于聚合可以使用相同的效果,因此我们不应该使用扩展,但我没有强有力的论据反对这种(ab)使用(?)。

另一方面,我可能完全错了。

您对此有何看法?谢谢你。

java dto
2个回答
0
投票

添加专用字段没有继承。

  • 后端数据模型分离清晰,显式使用扩展类。这也可以防止反模式具有

    DTO1Handler extends DTO2Handler
    以及超类的其他不当用法。链式不可空 getter 是可以接受的。

  • 额外数据是一种常见现象,因此只要不重写方法来使用这些额外数据,您实际上就是在“解耦数据”。您是说这个额外字段不是其他字段计算的一部分

  • 只是为了完整性:

    在极少数情况下,这样的额外字段可以成为超类的瞬态字段。


0
投票

例如

@Transient private String type; //data used in UI only

© www.soinside.com 2019 - 2024. All rights reserved.