【发布时间】:2020-05-28 22:36:13
【问题描述】:
我正在连接许多社交网络以登录我的应用程序。 对于每个社交网络响应,我都有一个 DTO。
public class GoogleUserInfo {
private String id;
private String firstName;
private String lastName;
private String email;
private AgeRange ageRange;
// more specific fields
}
public class FacebookUserInfo {
private String id;
private String firstName;
private String lastName;
private String email;
private String picture;
// more specific fields
}
public class AppleUserInfo {
private String id;
private String firstName;
private String lastName;
private String email;
private Boolean emailVerified;
// more specific fields
}
在每个社交网络连接器中,我都会采取类似的步骤来获取信息,所以我认为我可以使用一些 DTO,如下所示:
public class SocialNetworkInfo {
protected String id;
protected String firstName;
protected String lastName;
protected String email;
}
社交网络 DTO 可以扩展此功能以获得公共字段。然后我可以使用这个通用 DTO 来实现一个抽象连接器,处理连接器之间的所有重复逻辑(发出请求、解析响应等......):
abstract class AbstractConnector {
abstract SocialNetworkInfo fetchUserInfo(String networkId);
...
}
但我意识到,在上面,在我的服务层中,我需要那些特定的字段来进行一些更改和操作。
SocialNetworkInfo networkUserInfo = facebookConnector.fetchUserInfo(facebookId);
facebookService.updatePicture(networkUserInfo.getPicture()); // can't access this specific field
您认为在不强制转换和避免逻辑或 DTO 重复的情况下,最好的解决方法是什么?
很想听听你的想法。
谢谢!
【问题讨论】:
-
AbstractConnector<I extends SocialNetworkInfo>
标签: java inheritance dto code-duplication