Наше приложение Angular имеет сервис, который может иметь различные реализации, иначе. «стратегия». Для простоты, давайте предположим, что это услуга «сообщения о событиях». Служба отчетов о событиях имеет функцию для сообщения информации. В зависимости от предпочтения времени выполнения, отчетность может быть либо отключена, go для console
, либо отправлена в REST API, либо go где-то еще.
При использовании чистого TS это будет выглядеть как:
interface IReporter {
report (message: string): void;
}
class NoReporter implements IReporter {
report (message: string): void {
// no op.
}
}
class ConsoleReporter implements IReporter {
report (message: string): void {
console.log(message);
}
}
// etc.
В потребителе я бы поставил некоторую фабрику, которая доставляет требуемый репортер, например, на основе настройки предпочтений пользователя:
getReporter (key: string): IReporter {
switch (key) {
// … tedious cases, which need to be mainted. Yikes!
}
}
Однако это не так очень «угловой» -подобный Первым шагом, вероятно, было бы предоставление надлежащих Angular услуг отдельным репортерам, но это само по себе кажется малоприобретенным. Итак: существует ли какой-то существующий механизм, который дал бы мне над фабричной функциональностью динамический поиск реализации? Какие-либо образцы, примеры или лучшие практики для подражания?