Какой шаблон проектирования лучше всего разрешить одному общему классу от нескольких поставщиков? - PullRequest
5 голосов
/ 30 августа 2011

Я ищу написать приложение. Подумайте об электронной коммерции. Но подумайте, сайт электронной коммерции, который работает на другом провайдере.

Сценарий будет таким: я бы обозначил фронт сайта электронной коммерции, работающего на существующей платформе электронной коммерции клиента, будь то Magento, CubeCart, Prestashop или т. Д.

У всех этих платформ будут свои соглашения об именах и так далее, и мне нужен общий интерфейс в моем приложении. Например:

class Product {
    var $title;
    var $price;
    var $image;
    var $description;
    // and so on
}

Очевидно, что разные провайдеры могут называть вещи по-разному. Например, title может быть product_title в поставщике, или product_name, или productTitle, и так далее. Другой пример: price может быть cost или unit_price и т. Д. Надеюсь, проблема станет очевидной.

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

Какой шаблон проектирования будет лучшим для описанного выше сценария?

Ответы [ 3 ]

4 голосов
/ 30 августа 2011

Я бы пошел с чем-то вроде этого:

enter image description here

В зависимости от поставщиков, с которыми вы хотите интегрироваться, вы можете добавить дополнительные декораторы или фасады (например, для упрощения API) между адаптерами и реальными поставщиками.

2 голосов
/ 30 августа 2011

Я думаю, что в шаблон Facade лучше добавить провайдеров с вашими бизнес-классами.Однако шаблон Adapter также будет полезен при создании API, который взаимодействует с вашим существующим API.

0 голосов
/ 30 августа 2011

Я бы сказал, с адаптером или фасадом.Шаблон декоратора также может быть использован.Он предоставляет поставщикам возможность добавлять («украшать») продукты с дополнительной информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...