このページは書きかけです。
!!!小粒クラスからユーティリティクラスを上手に活用する
[関数とユーティリティクラスは禁止] において、
*ユーティリティクラスは禁止だが例外もある
という少し紛らわしい書き方をしました。
「安易に作らない」ということを強調するために禁止という言葉を使ったのですが、関数の使い道として次のようなものがあります。\\

!!氏名クラスから関数を使って保守性を高める
氏名クラスを例にして説明します。
%%prettify 
{{{
public class PersonName {
    private String familyName;
    private String givenName;
     
    public PersonName(String famiLyName, String givenName) {
      :
      :
}
}}}
/%
この中に
*フルネームを返す
というメソッドがあったとします。そのメソッドの要件は、
*姓と名の間にスペースを1つ入れて返す
というものです。以下です。
%%prettify 
{{{
public String getFullName() {
    return familyName + " " + givenName;
}
}}}
/%

一方で住所クラスがあります。属性は郵便番号と居所です。
%%prettify 
{{{
public class Address {
    private String zipCode;
    private String location;
     
    public Address(String zipCode, String location) {
      :
      :
}
}}}
/%

この中に住所全体を返すメソッドを実装します。要件は、
*郵便番号と居所の間にスペースを1つ入れて返す
です。
%%prettify 
{{{
public String getAddress() {
    return zipCode + " " + location;
}
}}}
/%
何やら似ていますね。そうgetFullName()メソッドとそっくりです。なぜなら、
*AとBの間にスペースを1つ入れて返す
と考えれば同じだからです。そこで関数を作ってそれを利用するように変更します。
%%prettify 
{{{
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);
}
}}}
/%
ところが仕様変更が発生し、フルネームの場合は間のスペースを2つにしなければならなくなりました。そこで以下のように修正します。
%%prettify 
{{{
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つが挿入されるように一括して変わります。\\
ただしこのような関数は
*経験のある設計者がきちんと設計した上で実装する
必要があります。そうしないと、
*データ構造を持たない処理が乱造される
結果になります。一つの指標としては、
*この種類の関数は小粒クラスからのみ利用する
という運用規則を用いることが言えます。小粒クラスは言ってみれば最小単位のクラスなので、それらに共通する場合は関数が必要なケースかもしれないと検討することには意義があると言えます。