このページは書きかけです。
小粒クラスから関数を上手に活用する#
関数とユーティリティクラスは禁止 において、- 関数とユーティリティクラスは禁止だが例外もある
氏名クラスから文字列編集関数を使って保守性を高める#
またもや氏名クラスを例にして説明します。
public class PersonName {
private String familyName;
private String givenName;
public PersonName(String famiLyName, String givenName) {
:
:
}
- フルネームを返す
- 姓と名の間にスペースを1つ入れて返す
public String getFullName() {
return familyName + " " + givenName;
}
一方で住所クラスがあります。属性は郵便番号と居所です。
public class Address {
private String zipCode;
private String location;
public Address(String zipCode, String location) {
:
:
}
この中に住所全体を返すメソッドを実装します。要件は、
- 郵便番号と居所の間にスペースを1つ入れて返す
public String getAddress() {
return zipCode + " " + location;
}
- AとBの間にスペースを1つ入れて返す
public class StringFunctions {
public static String joinWithSpace(String a, String b) {
return a + " " + b;
}
}
public String getFullName() {
return StringFunctions.joinWithSpace(familyName, givenName);
}
public String getAddress() {
return StringFunctions.joinWithSpace(zipCode, location);
}
public class StringFunctions {
public static String joinWithSpace(String a, String b) {
return StringFunctions.joinWithSpace(a, b, 1);
}
public static String joinWithSpace(String a, String b, int spaceSize) {
StringBuffer result = new StringBuffer(a);
for (int i = 0; i < spaceSize; i++) {
result.append(" ");
}
result.append(b);
return result.toString();
}
}
public String getFullName() {
return StringFunctions.joinWithSpace(familyName, givenName, 2);
}
修正箇所はPersonName#getFullName()のみで、かつ、PersonNameクラスを利用している各アプリケーションの修正は一切不要です。社員クラスから利用していようが取引先クラスから利用していようが、人の姓名の間にはスペース2つが挿入されるように一括して変わります。
関数を利用する上での注意点#
ただし関数は、- 経験のある設計者がきちんと設計した上で実装する
- データ構造を持たない処理が乱造される
- AとBの間にスペースを1つ入れて返す
- AとBが文字列でさえあればその属性の業務的特徴に関係なく使えてしまう
この関数を小粒クラスからではなく、例えば画面アプリケーションや帳票アプリケーションから直接使ってしまうと上記に書いたようなスペースを2つに換えるという単純な仕様変更でさえ、あちこちのコードを修正する必要が出てしまいます。
これを避けるための一つの指標としては、
- この種類の関数は小粒クラスからのみ利用する
まとめ#
- 異なるクラスの異なる属性を共通的に扱う関数とユーティリティクラスは小粒クラスから利用する
- それらは経験のある設計者が設計する
添付ファイルの追加
ログイン済のユーザのみが添付ファイルをアップロード出来ます。
«
This particular version was published on 18-5-2016 11:13 by ytp.
