bespoyasov / solidbook

Book about the SOLID principles and object-oriented software design.
https://solidbook.vercel.app
MIT License
602 stars 59 forks source link

Wrong code example on "srp/in-ideal-world" page #131

Closed SmetaninPavel closed 5 years ago

SmetaninPavel commented 5 years ago

Вопрос к примеру из главы https://ota-solid.now.sh/srp/in-ideal-world

В первом блоке кода следующий пример:

// класс, который занимается экспортом данных
class ReportExporter {
  name: string
  data: ReportData

  constructor(name: string, data: ReportData) {
    this.name = name
    this.data = data
  }

  export(reportType: ReportTypes): string {
    const formatter: Formatter = new FormatSelector(reportType, this.data)
    return formatter.format()
  }
}
  1. У FormatSelector мы вызываем конструктор с двумя переменными reportType иthis.data
  2. Затем вызывает formatter.format() без аргументов

Но конструктор FormatSelector принимает только одну переменную:

class FormatSelector {
  formatters = {
    [ReportTypes.Html]: HtmlFormatter,
    [ReportTypes.Txt]: TxtFormatter,
  }

  constructor(reportType: ReportTypes) {
    const FormatterFactory = this.formatters[reportType]
    return new FormatterFactory()
  }
}

const dynamicFormatter = new FormatSelector(ReportTypes.Html)
dynamicFormatter.format(/*...*/)

А метод formatпринимает data:

interface Formatter {
  format(data: ReportData): string;
}
bespoyasov commented 5 years ago

Да, верно замечено. Под эту проблему уже есть пул-реквест.