Эта тема немного сложнее, чем в заголовке.Давайте предположим, что мы хотим смоделировать сущность.Это что-то вроде информации KYC (имя, фамилия, адрес и т. Д.).Я мог бы смоделировать это простым способом в одном классе, например:
public class KYCInfo {
private KYCInfoType type;
private String firstName;
private String lastName;
private Address personalAddress;
private Address buisnessAddress;
private String country;
private String state;
private LocalDate dateOfBirth;
private String personalIdNumber;
}
Как вы видите в коде выше, этот KYC может быть другого типа.На самом деле два типа могут быть в этом типе - бизнес и индивидуальные.Для бизнеса обязательным является поле buisnessAddress, для отдельного personalIdNumber - обязательное.Кроме того, некоторые из этих полей будут необходимы в зависимости от поля страны.State
поле для США, но не для европейских стран.Размещение всех этих полей в одном классе кажется неуместным - каждый экземпляр, зависящий от поля, будет иметь множество нулевых значений.Я мог бы создать отдельные классы для BuisnessKYCInfo
и IndividualKYCInfo
, например.Но тогда у меня были бы некоторые дубликаты в полях (допустим, что firstName
, lastName
и некоторые другие поля одинаковы для обоих классов).Я мог бы создать абстракцию с общими полями.Например:
public abstract class KYCInfo {
private String firstName;
private String lastName;
}
Теперь представьте, что это простой класс DTO, и в какой-то момент я каким-то образом обрабатываю его в методе processKYCInfo()
.Когда у меня есть два класса BuisnessKYCInfo and
IndividualKYCInfo then I would need to have two methods
``processKYCInfo(BuisnessKYCInfo kycInfo)
и processKYCInfo(IndividualKYCInfo kycInfo)
.Этот метод выполняет ту же операцию, но собирает информацию из разных полей.Теперь представьте, что у вас есть больше типа, чем индивидуальность или бизнес.Или, как я уже писал, добавляется дополнительный тип, например country
.Теперь мне нужно 25 стран, в некоторых из них есть поля, специфичные только для этой страны.При таком же подходе, как и раньше, у меня было бы 25 методов, делающих практически то же самое.Это также кажется неуместным.Какой другой вариант мне нужно смоделировать?Может быть, какая-то структура данных, может быть, какая-то карта?Каков наилучший подход к этому?Как я могу сделать это более общим способом?