gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:34:10 25 4
gpt4 key购买 nike

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

我们有一个分层架构,类似于:

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)使用(?)。

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

您对此有何看法?谢谢。

最佳答案

没有继承来添加专用字段。

  • 后端数据模型清晰分离,并显式使用扩展类。这还可以防止具有 DTO1Handler extends DTO2Handler 的反模式以及父类(super class)的其他不当用法。链式不可空 getter 是可接受的。

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

  • 只是为了完整性:在极少数情况下,这样的额外字段可以成为父类(super class)的 transient 字段。

关于java - 一个 DTO 可以扩展另一个 DTO 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com