Как реализовать класс-оболочку для нескольких классов в Typescript - PullRequest
1 голос
/ 14 апреля 2020

У меня есть несколько API для обеспечения одной и той же функциональности, я хочу обернуть их, поэтому мне нужно обрабатывать только один класс, и в будущем может быть добавлено несколько API.

Что я уже сделал:

class FirstAPI: API {}

class SecondAPI: API {}

class GeneralAPI: API {
  public api: API;

  constructor(type: string){
    if(type === 'first') {
      this.api = new FirstAPI();
    }
    if(type === 'second') {
      this.api = new SecondAPI();
    }
  }


  someMethod(){
    this.api.someMethod();
  }

}

Как вы можете видеть, делая это, я вынужден без необходимости повторять свои методы, а также вручную обрабатывать тип ввода и вывода в классе General.

Пожалуйста, предложите какое-нибудь лучшее, более элегантное решение. с надлежащей поддержкой типа.

1 Ответ

1 голос
/ 14 апреля 2020

Проблема с вашим текущим кодом - использование if...else, которое нарушает OCP (принцип Open-close).

Здесь вам действительно нужен фабричный шаблон, в котором вы зарегистрируете все доступные API, которые можно создать. После чего вы можете просто использовать ключ, чтобы создать их соответственно.

например (просто для идеи)

ApiFactory.register('firstApi', FirstAPI);
ApiFactory.register('secondApi' SecondAPI);
const api: API = ApiFactory.get('firstApi');
api.someMethod();

объяснение фабричного образца

больше объяснения по фабричному образцу

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