🕙

[読書メモ]オブジェクト設計スタイルガイド 6章4節 with TypeScript

2024/03/01に公開

オブジェクト設計スタイルガイドを読みながら、TypeScriptでやるならどうやるかを考えながら書きました。
要約的に読める内容になっていると思うので、サクッと3分ぐらいで読める記事となっています。
https://www.oreilly.co.jp/books/9784814400331/

6.4 尋ねたいクエリに特化したメソッドとその戻り値の型を定義する

為替ルートをwebサービスから取得する場合

NG

何でもかんでもやりすぎている。

class CurrencyConverter {
  convert(money: Money, to: Currency) {
    httpClient = new HttpClient()

    res = httpClient.get(/**/)

    decoded = json_decode(res.body)

    rate = Number(decoded.rates)

    return money.convert(to, rate)
  }
}

OK

exchangeRateFor というメソッド(ExchangeRateを返すもの)を導入することで、コード内でやりとりされていたコードが改善される。

class FixerAPI {
  exchangeRateFor(from: Currency, to: Currency): ExchangeRate {
    httpClient = new HttpClient()

    res = httpClient.get(/**/)

    decoded = json_decode(res.body)

    rate = Number(decoded.rates)

    return ExchangeRate.from(from, to, rate)
  }
}

class ExchangeRate {
  from(from: Currency, to: Currency, rate: Number) {}
}


class CurrencyConverter {
  private fixerAPI: FixerAPI

  convert(money: Money, to: Currency) {
    rate = this.fixerAPI.exchangeRateFor(money.currency(), to)

    return money.convert(rate)
  }
}

Discussion