过去,我的DTO一直是该实体的直接地图。但是,我现在处在一个场景中,我们真正需要的只是嵌套对象的ID,因此我们可以根据需要进行数据库查找。看起来像这样
public class UserDto {
Integer id;
String name;
List<Integer> groupIds;
}
但是实体看起来像这样
public class UserEntity {
Integer id;
String name;
List<UserGroupEntity> userGroups;
}
这是常见的做法吗?我是否应该直接从实体映射DTO并嵌入UserGroup DTO?
答案 0 :(得分:1)
我通常会选择选项1,只包括其他实体的ids
。否则,DTO可能在一段时间后变得become肿,从而导致许多不必要的数据库查找。
如果DTO没有包含实体就没有任何意义,我只会选择第二种选择。但这几乎绝不是这种情况,并且假设您知道DTO的所有未来用户希望拥有的信息是困难而危险的。
在API端点设计方面(假设您选择方法一),您可以通过调用以下端点来让客户端获取User
和UserGroup
:
/users/:id
/users/:id/usergroups
这是为了使客户端不必在提取User
之前等待UserGroup
提取完成。这遵循RESTful原则,例如从客户端并行完成。