クラス名は名詞、メソッド名は動詞+目的語にする。
|
GetPersonalData.java
public class GetPersonalData {
public String name(String id) {
// 略
}
public String address(String id) {
// 略
}
}
何をするメソッドかが分かりにくい。 |
PersonalData.java
public class PersonalData {
public String getName(String id) {
// 略
}
public String getAddress(String id) {
// 略
}
}
何をどうするメソッドかが分かりやすい。 |
メソッドに複数の機能を持たせない。クラスやメソッドの名前にそぐわないコードがあるようならば、それはそこに存在してはいけないコードなので、別のクラスやメソッドに分ける。
|
Person.java
public class Person {
private String phoneNumber;
private boolean employee;
public boolean setPhoneNumber(String number) {
if (employee) {
// 社員はそのまま設定
phoneNumber = number;
return true; // 社員は true
}
else {
// 非社員は 0 を付けて設定
phoneNumber = "0" + number;
return false; // 非社員は false
}
}
// 略
}
電話番号を設定するメソッドなのに、社員かどうかの判定もしています。 |
Person.java
public class Person {
private String phoneNumber;
private boolean employee;
public void setPhoneNumber(String number) {
if (employee) {
// 社員はそのまま設定
phoneNumber = number;
}
else {
// 非社員は 0 を付けて設定
phoneNumber = "0" + number;
}
}
public boolean isEmployee() {
return employee; // 社員は true
}
// 略
}
電話番号を設定するメソッドと、社員かどうかの判定メソッドを分けます。 |
同じ情報を操作するメソッドが散在していると、情報の構造変更に対応することが難しくなります。同じ情報を操作するメソッドは同じクラスにまとめます。
|
Check.java
public class Check {
public boolean isValidPhoneNumber(String number) {
// 略
}
public boolean isEnoughStock(Product p, int c) {
// 略
}
}
Calculation.java
public class Calculation {
public int getTotalAmount(List<Product> list) {
// 略
}
public int getDiscountPrice(Product p) {
// 略
}
}
互いに関係の薄いメソッドが一つのクラスに存在しています。 他のクラスから共通の処理を呼び出すことは容易になりますが、関連する処理が散在してしまい、メンテナンスや変更が困難になります。 |
Phone.java
public class Phone {
private String phoneNumber;
public String isValidPhoneNumber() {
// 略
}
// 電話に関する他のメソッド
}
Product.java
public class Product {
private int stock;
public boolean isEnoughStock(int c) {
// 略
}
public int getDiscountPrice() {
// 略
}
// 商品に関する他のメソッド
}
Sales.java
public class Sales {
private List<Product> list; // 売り上げリスト
public int getTotalAmount() {
// 略
}
public void add(Product p) {
// 略
}
// 売り上げに関する他のメソッド
}
|