getter/setterを使うなとは

単純に絶対にgetter/setterを設けるなということではなく、

必要な情報を持つクラス自体に必要な処理をさせ、メソッド経由でその値を受けるべき。getterを呼び出すような処理を実装している場合、その処理は本来呼び出されるクラス側で実装されるべきだということ。

例えば、食品の割引後の価格を求める場合を考える

■クラスを利用する側で計算する

Food food = foodList.Find(foodId)

int discountPrice = food.getPrice() * discountRequirement

 

クラス側で計算し、割引後の価格を取得する

Food food = foodList.Find(foodId)

int discountPrice = food.DiscountPrice()

 

後者が単純にgetterを使わない例。

こうすると、以下の点で優れている。

①前者は食品の価格を自体公開していて、後者は価格自体は隠蔽しており

 必要とされている割引後の価格を公開している

②価格自体を公開している場合、色々な所で同じような計算処理が作られる可能性があ

 り、メンテナンス性が著しく損なわれる

③後者は計算処理自体が呼び出されるクラス側に実装されている為、

 割引価格計算処理自体に変更が発生した場合に、Foodクラスの修正だけでよく

 呼び出し側は修正が不要となる。

 もし呼び出し側で計算ロジックを組んでいた場合、且つ複数個所でそういう

 計算ロジックがある場合、メンテナンスが凄く大変。