Как вы реализуете странные потребности бизнеса? - PullRequest
2 голосов
/ 17 ноября 2011

Мы предоставляем веб-сервисы, которые возвращают информацию о продукте, подобном этому (упрощенно)

<product>
<id>123</id>
<name>Mobil-home</name>
<pricing>
<price>12</price>
<adults>2</adults>
</pricing>
<pricing>
<price>15</price>
<adults>3</adults>
</pricing>
</product>

Наш партнер говорит: «Наша проблема в том, что в нашей системе у нас может быть только 1 количество взрослых на продукт»,Этот партнер работает с огромной системой, и они говорят, что это большая проблема, и они не могут ничего изменить в свою сторону.

Итак, что мы решили?чтобы взорвать наши результаты, как это

<product>
    <id>123</id>
<virtualId>123@2</virtualId>
    <name>Mobil-home</name>
    <pricing>
    <price>12</price>
    <adults>2</adults>
    </pricing>    
    </product>
<product>
    <id>123</id>
<virtulId>123@3</virtualId>
    <name>Mobil-home</name>
    <pricing>
    <price>15</price>
    <adults>3</adults>
    </pricing>
    </product>

Итак, мы создали «virtualId», который объединяет id и взрослых с @.Технически это беспорядок, но мы делаем программное обеспечение для бизнеса, цель не в том, чтобы делать чистое программное обеспечение, а чтобы зарабатывать деньги.

Мои решения:

  • Iпопытайтесь сделать из этого концепцию: «При некоторых вызовах мне нужно вызывать класс сервиса, который взорвет наши результаты», а затем добавить эту функцию в мой веб-сервис (даже если я уверен, что мы будем использовать это тольков случае этого партнера).

  • Я делаю 3 грязные строки кода с безобразным (если пользователь == "thispartner")

  • Я добавляю слой между моим партнером и моим веб-сервисом, который будет выполнять ужасную работу

  • Я упрям ​​и говорю своему боссу: "Мы не можем работать с ними,наши системы несовместимы ", и тогда я иду к полюсу Emploi.

Как вы справляетесь с этими случаями?

1 Ответ

0 голосов
/ 04 февраля 2012

Я думаю, что лучшее техническое решение будет зависеть от вашей реализации, поэтому оно не зависит от языка.

Например, если вы используете язык с полным отражением, такой как Python, мое решение было бы добавить поле базы данных в список партнеров с именем что-то вроде TransformationClass. Тогда код вашего веб-сервиса будет выглядеть примерно так:

output = do_normal_processing()
if partner.TransformationClass is not null:
    transformation = construct an instance of the partner.TransformationClass class
    output = transformation.transform(output)
return output

(Примечание: для Python вы можете создать экземпляр на основе имени класса , например, .)

Затем вы можете создать подкаталог с исходным кодом 'clientSpecificTransformations' и преобразования dropper-client; не нужно даже ничего перекомпилировать или перезапускать.

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

...