11章 諸悪の根源
コンストラクタはサブクラスをもつ十分な根拠ではない
サブクラスを消したい
サブクラスへの参照を、コードの意味を変えずにスーパークラスへの参照へと置き換える
MoneyクラスにあるFrancを排除
public static Money franc(int amount) { return new Franc(amount, "CHF"); }
テスト>グリーン
MoneyクラスにあるDollarを排除
public static Money dollar(int amount) { return new Money(amount, "USD"); }
テスト>グリーン
ここで、依存関係をByecycleプラグインで確認。
双方向が単方向になるのがわかる。
おー、これいいかも。
これで、パッケージをまたいでみれるとさらにいいかも。
Dollarクラスはどこからも使われないので削除
テスト>グリーン
Francはテストから参照されている
等価性のテストは他で満たされているか?を考える。
十分なので、新しい構造に無意味なテストを削除
testDiffClassEqaulity()テストの削除
同様に、乗法:Multiplicationのテストも分離されているがすでに無意味。
testFrancMultiplication()テストを削除。
まったく利用されていないFrancクラスを削除
テスト>グリーン
クラスがひとつになったので、次は加法に取り掛かる。
イテレーティブな感じがする。