создание API с использованием шаблона адаптера - PullRequest
1 голос
/ 26 ноября 2009

Я работаю над API для нескольких веб-сервисов, которые возвращают список продуктов. Однако возвращаемые объекты совсем другие. Они имеют некоторые совпадения в переменных и методах-членах, но также и в числах, которые либо концептуально отличаются, либо немного отличаются. Что было бы лучшим способом структурировать API? Я думаю, что это шаблон адаптера, но я не уверен.

Так, например, мой класс имеет (псевдокод, не настоящий язык)

member: webservice (type: object, может быть нескольких типов, все с одинаковым интерфейсом)

метод: setCurrentWebservice (service) {self.webservice = service}

method: getProducts () {return self.webservice.getProducts ();}

Также некоторые методы поддерживаются в одном веб-сервисе, но не поддерживаются в другом. Должен ли я сделать «метод не поддерживается» методы? Что эти должны вернуть?

1 Ответ

0 голосов
/ 26 ноября 2009

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

Если цель состоит в том, чтобы предоставить единый интерфейс для двух API-интерфейсов служб и скрыть тот факт, что действительно существуют две разные реализации, то вам необходимо стремиться скрыть все различия между этими двумя службами от пользователя вашего Финальный фасад. Это потребует некоторой работы, поскольку, как вы указали, одна служба может поддерживать один метод, но не другой.

Если, однако, цель состоит в том, чтобы просто предоставить один и тот же интерфейс только для того, чтобы пользователю было легко переключаться между базовой реализацией, которую он хочет использовать, то это может быть менее важным. Вы, вероятно, можете просто документально подтвердить, что реализация x не поддерживает метод y.

Здесь нет сложных и быстрых ответов: в первом случае вам необходимо четко определить мотивацию, потому что я считаю, что, как я уже сказал, есть как минимум две возможности, и каждая из них, вероятно, требует немного другого подхода. Но чтобы ответить на ваш вопрос, да, вам нужен адаптер, но вполне то, как вы хотите, чтобы адаптер работал, что можно определить только в том случае, если вы сначала укажете причину предоставления этого API.

...