Рефакторинг переключателя операторов машинописного текста - PullRequest
0 голосов
/ 07 января 2019

Есть ли лучший способ написать оператор switch в машинописи? У меня есть следующий код в компоненте:

switch (actionType) {
    case Type.Cancel {
        this.cancel();
        break;
    }
    case Type.Discard {
        this.discard();
        break;
    }
    case Type.Delete {
        this.delete();
        break;
    }
}

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

1 Ответ

0 голосов
/ 07 января 2019

Хорошая золотая середина - иметь карту от Type до функции:

class Test {
  private map = new Map<Type, () => void>([
    [Type.Cancel, () => this.cancel()],
    [Type.Discard, () => this.discard()],
    [Type.Delete, () => this.delete()]
  ]);

  yourMethod(actionType: Type) {
    if (this.map.has(actionType)) {
      this.map.get(actionType)();
    }
  }
}

Если методы уже связаны (с функцией стрелки, bind и т. Д.), Вы можете упростить, например:

  private map = new Map<Type, () => void>([
    [Type.Cancel, this.cancel],
    [Type.Discard, this.discard],
    [Type.Delete, this.delete]
  ]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...