这更像是一个理论问题,而不是一个实际问题。
我们有一个分层架构,有点像:
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工作正常,但我不喜欢仅使用扩展来添加新数据的想法。我习惯使用扩展来添加新的行为(比如Dog和Cat扩展的Animal)。由于聚合可以使用相同的效果,我们不应该使用扩展,但是我没有强烈反对这种(ab)使用(?)的论据。
另一方面,我可能完全错了。
你对此有何看法?谢谢。
答案 0 :(得分:0)
没有用于添加专用字段的继承。
后端数据模型明确分开,显式使用扩展类。这也防止了具有DTO1Handler extends DTO2Handler
的反模式和超类的其他不适当的用法。链式不可空的吸气剂是可以接受的。
额外数据是一种常见现象,因此只要不使用方法来覆盖这些额外数据,您实际上就是解耦数据。您说此额外字段不是其他字段的计算的一部分。
为了完整起见:在极少数情况下,这样的额外字段可以成为超类的瞬态字段。
答案 1 :(得分:-1)
如果您正在使用Hibernate架构,我会将@Transient注释用于UI所需的注释,因为带有注释的DTO属性不会被解析为DB端。
e.g。
@Transient
private String type; //data used in UI only