7章 りんごとみかん

FrancクラスとDollarクラスの比較


testEqaulity()に検証を追加

public void testEqaulity(){
assertTrue(new Dollar(5).equals(new Dollar(5)));
assertFalse(new Dollar(5).equals(new Dollar(6)));
assertTrue(new Franc(5).equals(new Franc(5)));
assertFalse(new Franc(5).equals(new Franc(6)));

//FrancとDollarの比較
assertFalse(new Franc(5).equals(new Dollar(5)));
}

テストは失敗

  • eqaulsメソッドは上位のMoneyクラスで、FlancもDollarも一緒に扱っているので失敗する

equalメソッド内で二つのオブジェクトを比較しないようにする


2つのオブジェクトのクラスを比較することで対応が可能


amountと、比較しているオブジェクトが同じクラスの場合に2つのMoneyは等しい


Money.equalメソッドを変更

public boolean equals(Object object) {
Money money = (Money)object;
return amount == money.amount
		&& getClass().equals(money.getClass());
}

すごいかき方だよね?


この本でもコードについて、少しおかしいと

  • この操作はJavaオブジェクトのドメインではなく、財務のドメインでやりたいが
  • 基準がいまのところなく、このことが基準を設けるきっかけには弱い?ので、ひとまずこれで

実際には混合通貨を行えるようにする必要がある


通貨をタスクに追加


より良い動機付けがない限り、これ以上設計を導入しない。これがリファクタリングのやめるポイントにもなるんだね、なるほどー。