Передовая практика перечисления наследования - Абстрактный метод против параметра конструктора? - PullRequest
0 голосов
/ 02 апреля 2020

Учитывая, что здесь есть лучшая практика.

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

При использовании конструкторского подхода вы можете указать уникальный идентификатор только с помощью переменной. Тем не менее, требуется, чтобы вы вызывали супер-конструктор, что в противном случае вам не нужно (в любом случае в этом примере)

Просто интересно, есть ли здесь какая-то цель, которую я пропускаю. Потому что оба инкапсулируют то, что варьируется в дочернем классе.

// Enum
enum Id {
  A,
}

// Abstract class requiring subclasses to implement method returning their ID
abstract class Abstract_Method {
  abstract id(): Id;

  log() {
    console.log(this.id());
  }
}

// Abstract class requiring subclasses to call the super constructor and specify their ID
abstract class Abstract_Constructor {
  id: Id;

  constructor(id: Id) {
    this.id = id;
  }

  log() {
    console.log(this.id);
  }
}

// Child classes
class Child_Method extends Abstract_Method {
  id(): Id {
    return Id.A;
  }
}

class Child_Constructor extends Abstract_Constructor {
  constructor() {
    super(Id.A);
  }
}

// Test
new Child_Method().log();
new Child_Constructor().log();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...