Я подключаюсь ко многим социальным сетям для входа в свое приложение. У меня есть один 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
}
В каждом коннекторе социальной сети я делаю аналогичные шаги для получения информации, поэтому я подумал, что могу go с некоторым DTO следующим образом:
public class SocialNetworkInfo {
protected String id;
protected String firstName;
protected String lastName;
protected String email;
}
DTO социальных сетей могут расширить это, чтобы получить общие поля. Затем я мог бы использовать этот общий c DTO для реализации абстрактного коннектора, который имеет дело со всеми повторяющимися логами c между коннекторами (запрос на выполнение, анализ ответа и т.д. c ...):
abstract class AbstractConnector {
abstract SocialNetworkInfo fetchUserInfo(String networkId);
...
}
Но я понял, что выше, на моем уровне обслуживания, мне понадобятся эти c поля для внесения некоторых изменений и операций.
SocialNetworkInfo networkUserInfo = facebookConnector.fetchUserInfo(facebookId);
facebookService.updatePicture(networkUserInfo.getPicture()); // can't access this specific field
Как вы думаете, что это лучший способ go через эту ситуацию без преобразования и избежания logi c или дублирования DTO?
Хотелось бы услышать ваши мысли.
Спасибо!