Дизайнерский шаблон для создания элегантного пужу - PullRequest
0 голосов
/ 07 февраля 2019

Мне нужно создать слой, который извлекает данные из трех разных источников на основе некоторых настроек, когда мы пытаемся перейти на новые системы, и мы все еще хотим поддерживать устаревший поток до тех пор, пока мы не переключимся.

Допустим, нам нужно получить консолидированный POJO, который содержит вторичные тяжелые POJO.

class X { 
   Y1 obj1;
   Y2 obj2;
   Y2 obj3;
...
}

Я создал слой, который может вызывать любой из нисходящих сервисов и вводить данные.Я хотел бы, чтобы у каждого из Y1 и Y2 и Y3 были свои собственные заполнители, и они могли быть построены из разных типов POJO из разных сервисов, которые вызывает этот уровень.Есть ли элегантный способ сделать это так, чтобы позже мне нужно было только добавить код.Также я бы хотел максимально придерживаться принципов SOLID.

Один из способов, о котором я подумал, - это иметь шаблон стратегии для каждого типа Y, и мы выбираем стратегию для преобразования на основе сервиса и пройденного pojo.

Но это приводит к буму в класседля каждого нового комплекса Y внутри X мне нужно будет написать несколько стратегий, которые, по сути, состоят из множества классов.

1 Ответ

0 голосов
/ 07 февраля 2019

Использование Внедрение зависимостей .Итак, для вашего класса, пусть конструктору будут даны obj1, obj2 и obj3, которые он будет использовать вместо того, чтобы сам создавать эти объекты:

class X { 
   private final Y1 obj1;
   private final Y2 obj2;
   private final Y2 obj3;

   X(Y1 obj1, Y2 obj2, Y2 obj3)
   {
      this.obj1 = obj1;
      this.obj2 = obj2;
      this.obj3 = obj3;
   }
...
}

Это будет лучше, еслиY1 и Y2 являются интерфейсами или абстрактными базовыми классами .

...