Сущность разного типа с множеством полей - как лучше всего ее моделировать? - PullRequest
0 голосов
/ 04 января 2019

Эта тема немного сложнее, чем в заголовке.Давайте предположим, что мы хотим смоделировать сущность.Это что-то вроде информации 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 методов, делающих практически то же самое.Это также кажется неуместным.Какой другой вариант мне нужно смоделировать?Может быть, какая-то структура данных, может быть, какая-то карта?Каков наилучший подход к этому?Как я могу сделать это более общим способом?

1 Ответ

0 голосов
/ 04 января 2019

Вот мой подход:

Ниже приведена структура данных, которую я буду использовать: -

  public class KYCInfo {
      private KYCInfoType type;
      private Map<String, String> name;
      private Map<String, String> address;
      private String country;
      private String state;
      private LocalDate dateOfBirth;
      private String personalIdNumber;
      public KYCInfo(){
          name = new HashMap<>();
          address = new HashMap<>();
  }

Так в чем преимущество этого подхода: -

  • Вместо создания нескольких атрибутов одного типа создайте семейство.Например, name будет семейством для 'firstName', 'middleName', 'lastName'.Эта пара будет похожа на <'firstName', 'Bob'>, <'lastName', 'Marley'> и т. Д. Таким образом, вы можете иметь один из них или все из них.
  • Аналогично для других атрибутовкак адресПара может быть как <'personalAddress', 'some value'>, <'buisnessAddress', 'some value'>
  • Каждая запись может иметь свои собственные категории для семьи.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...