Шаблон проектирования java для различных вариантов одного и того же ввода, которые будут преобразованы в общий вывод

У меня есть сценарий, в котором есть агрегатор услуг, например, скайсканер, каяк или полеты Google. Если вы видите, все они запрашивают базовые данные, такие как источник, пункт назначения, дата и количество пассажиров. После того, как вы выберете рейс у определенного поставщика услуг, скажем, например, в Expedia, вы будете перенаправлены в Expedia с предварительно заполненными данными, которые были отправлено агрегатором услуг

Теперь имя параметров, отправленных из исходной системы, может отличаться, и в месте назначения мы должны преобразовать его в тот же POJO.

Один из вариантов, о котором я думал, - это шаблон Factory, основанный на канале, я возвращал объект, который преобразовывал бы исходные параметры в общий POJO.

Другой шаблон проектирования, который мне кажется похожим, - это шаблон проектирования стратегии, предназначенный для создания стратегии извлечения на основе контекста.

Есть ли какой-нибудь другой подходящий дизайн для решения этой проблемы?

0
0
736
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ИМХО, сохраняя реализацию как можно проще, я бы посоветовал вам использовать простой фабричный шаблон. Определите заводскую службу для выполнения двух операций:

  1. Получение указанной карты всех параметров, таких как источник, назначение. дата и т.п ...
  2. Теперь простой метод transformModel (карта, тип SourceAgg)

Определите родительский класс, который имеет общие поля вашего POJO (скажем, BasePOJO), а затем расширьте все другие типы POJO агрегатора источника (при условии, что все будут иметь разные имена полей и т. д.). Поскольку каждый ваш источник агг. классы будут иметь свою собственную логику для создания POJO, специфичного для этого типа агрегатора источников.

Чтобы связать каждый исходный класс impl. поддерживать перечисление: (sourceType, sourceAggClass)

бывший:

enum sourceAgg{ (EXPEDIA, ExpediaModelImpl), (VIA, ViaModelImpl); }

Все, что вам нужно сделать, это получить реализацию на основе ключа агрегатора источника (скажем, ЭКСПЕДИА) из перечисления, поскольку у вас есть имя компонента в контексте, вы можете легко вызвать функцию transformModel для каждого типа. Объект, возвращаемый transformModel от каждого из исходных агг. классы будут иметь тип BasePOJO, их будет легко обрабатывать как формальные параметры.

В будущем, если вы хотите добавить новый агрегатор источника, все, что вам нужно сделать, это просто написать модель преобразования этого класса и добавить сопоставления перечислений, вот и все!

PS: Это мой второй ответ на SO, предложения приветствуются.

+1 Поскольку это было в тех же строчках, о которых я подумал, когда упомянул Factory Pattern. Подожду день и посмотрю, есть ли другие шаблоны проектирования, которые я полностью пропустил, иначе отметит это как ответ завтра

Sandeep Nair 26.10.2018 09:53

Другие вопросы по теме