我正在与许多社交网络连接以登录我的应用程序。 每个社交网络响应都有一个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重复的情况下解决此问题的最佳方法是什么?
很想听听您的想法。
谢谢!