🕙
[読書メモ]オブジェクト設計スタイルガイド 6章4節 with TypeScript
オブジェクト設計スタイルガイドを読みながら、TypeScriptでやるならどうやるかを考えながら書きました。
要約的に読める内容になっていると思うので、サクッと3分ぐらいで読める記事となっています。
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