Какой шаблон дизайна я должен использовать?(API платежной системы) - PullRequest
1 голос
/ 28 февраля 2012

Мне нужно реализовать классы, которые работают с API платежной системы (назовем его PaymentSystem), который разрешает операции, перечисленные ниже:

  • Выдача счета пользователю
  • Проверка счета
  • Получить баланс пользователей
  • Проверить существование получателя

Теперь у меня есть:

абстрактный класс PaymentSystemBase где все настройкиостаются (токен безопасности, пароль, URL API RESTful и т. д.)

класс для каждой записи API:

  • PaymentSystemIssueInvoice
  • PaymentSystemCheckInvoice
  • PaymentSystemGetBalance
  • PaymentSystemCheckUser

каждый из этих классов наследуется от PaymentSystemAPI с методами (конечно, унаследованными от PaymentSystemBase):

  • request - выполняет запрос по HTTP
  • parseResponse для анализа ответа от API (в основном говорит, был ли запрос успешным или мы получили ошибку)

Итак, мой вопрос: было бы удобно использовать какой-либо шаблон проектирования создания для API (IssueInvoice, CheckInvoice, GetBalance, CheckUser)?

Если у вас есть предложение, как я должен был реализовать API другим способом, пожалуйста, не стесняйтесь отвечать / комментировать вопрос.

Спасибо.

1 Ответ

1 голос
/ 28 февраля 2012

Это может быть похоже на команду (замечено Ирфием).

Если у вас есть сложная логика, которая определяет, какой подкласс базового класса использовать (т. Е. Больше, чем разумно делать с несколькими параметрами конструктора), тогда вы можете использовать шаблон factory .

Я также выброшу стратегию , но мы можем сбиться с пути.

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

  1. Увеличение читабельности кода
  2. Увеличение возможности повторного использования кода.
  3. Отделите то, что может измениться от того, что не изменится.

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

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

...