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クラスを削除


テスト>グリーン


クラスがひとつになったので、次は加法に取り掛かる。
イテレーティブな感じがする。