設計の良し悪しはソフトウェアの変更するときにわかる
変更が大変なプログラムの特徴は次の3つです。
改善するには
省略形は使わない(qtyとか)
分野で普通に使われる単語を使用する
長いメソッドは段落に分ける
目的ごとにローカル変数に切り出す(説明用の変数の導入)
一つの変数を使いまわすのはご法度(破壊的代入)
メソッドとして独立させる
特手の関心ごとに特化したクラスを作成する
値の範囲を限定する独立したクラスを作成する
classQuantity{
static final int MIN = 1;
static final int MAX = 100;
int value;
Quantity(intvalue){
if(value<MIN) throw new IllegalArgumentException("不正:"+MIN+"未満");
if(value>MAX)thrownewIllegalArgumentException("不正:"+MAX+"超");
this.value=value;
}
booleancanAdd(Quantityother){
intadded=addValue(other);
returnadded<=MAX;
}
Quantityadd(Quantityother){
if(!canAdd(other)) throw new IllegalArgumentException("不正:合計が"+MAX+"超");
int added = addValue(other);
return newQuantity(added);
}
private int addValue(Quantityother){
returnthis.value+other.value;
}
}
このような値を扱うオブジェクトを値オブジェクトと呼ぶ

値オブジェクトはimmutableにすること!