「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されて

ryoasai さんの「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されたので、
Java の勉強がてら、同様なプログラムを作成してみる。

Step 6

以下のように、配列の何番目の要素かを直接指定するのは、可読性も保守性も低いので、

                    System.out.print(jinzaiAry[0]); // 人材ID
                    System.out.print("\t");
                    System.out.print(jinzaiAry[1]); // 人材名
                    System.out.print("\t");
                    System.out.println(gyoshuMap.get(jinzaiAry[9]));    // 業種ID

各マスタの値を保持する Entity クラスを作成する。
(ryoasai さんのソースを元にしています。)

各マスタの Base Class
abstract class EntityBase {
    // ID
    protected String id;
    // 名称
    protected String name;
    // 登録日付
    protected String createDate;
    // 更新日付
    protected String updateDate;
    // 削除日付
    protected String deleteDate;

    // ID
    public String getID()           { return id;    }
    // 名称
    public String getName()         { return name;  }
    // 登録日付                     
    public String getCreateDate()   { return createDate;    }
    // 更新日付                     
    public String getUpdateDate()   { return updateDate;    }
    // 削除日付                     
    public String getDeleteDate()   { return deleteDate;    }

    public abstract void fromArray(String[] data);

    protected void readMetaCulumns(String[] data, int startColumn) {
        int i = startColumn;

        // 登録日付
        if (i < data.length) {
            createDate = data[i++];
        }
        // 更新日付
        if (i < data.length) {
            updateDate = data[i++];
        }
        // 削除日付
        if (i < data.length) {
            deleteDate = data[i++];
        }
    }
}
業種マスタ
class Gyoshu extends EntityBase {
    public void fromArray(String[] data) {
        int i = 0;

        // 業種ID
        id = data[i++];
        // 業種名
        name = data[i++];

        readMetaCulumns(data, i);
    }
}
稼働状況マスタ
class Kadou extends EntityBase {
    // 稼働状況番号
    private String kadouStatus;
    // 取引先ID
    private String torihikiID;
    // 稼働開始日
    private String startDate;
    // 稼働終了日
    private String endDate;
    // 契約単価
    private String keiyakuTanka;

    // 稼働状況番号                 
    public String getKadouStatus()  { return kadouStatus;   }
    // 取引先ID                     
    public String getTorihikiID()   { return torihikiID;    }
    // 稼働開始日                   
    public String getStartDate()    { return startDate; }
    // 稼働終了日                   
    public String getEndDate()      { return endDate;   }
    // 契約単価                     
    public String getKeiyakuTanka() { return keiyakuTanka;  }

    public void fromArray(String[] data) {
        int i = 0;

        // 人材ID
        id = data[i++];
        // 稼働状況番号
        kadouStatus = data[i++];
        // 取引先ID
        torihikiID = data[i++];
        // 稼働開始日
        startDate = data[i++];
        // 稼働終了日
        endDate = data[i++];
        // 契約単価
        keiyakuTanka = data[i++];

        readMetaCulumns(data, i);
    }
}
人材マスタ と 取引先マスタ の Base Class
abstract class Party extends EntityBase {
    // 郵便番号
    protected String zip;
    // 住所
    protected String address;
    // 電話番号
    protected String tel;
    // FAX番号
    protected String fax;
    // e-mailアドレス
    protected String email;

    // 郵便番号                     
    public String getZip()          { return zip;   }
    // 住所                         
    public String getAddress()      { return address;   }
    // 電話番号                     
    public String getTel()          { return tel;   }
    // FAX番号                      
    public String getFax()          { return fax;   }
    // e-mailアドレス               
    public String getEmail()        { return email; }
}
人材マスタ
class Jinzai extends Party {
    // 生年月日
    private String birthDate;
    // 性別
    private String sex;
    // 業種ID
    private String gyoshuID;
    // 経験年数
    private String nensu;
    // 最終学歴
    private String gakureki;
    // 希望単価
    private String tanka;

    // 生年月日                     
    public String getBirthDate()    { return birthDate; }
    // 性別                         
    public String getSex()          { return sex;   }
    // 業種ID                       
    public String getGyoshuID()     { return gyoshuID;  }
    // 経験年数                     
    public String getNensu()        { return nensu; }
    // 最終学歴                     
    public String getGakureki()     { return gakureki;  }
    // 希望単価                     
    public String getTanka()        { return tanka; }

    public void fromArray(String[] data) {
        int i = 0;

        // 人材ID
        id = data[i++];
        // 氏名
        name = data[i++];
        // 郵便番号
        zip = data[i++];
        // 住所
        address = data[i++];
        // 電話番号
        tel = data[i++];
        // FAX番号
        fax = data[i++];
        // e-mailアドレス
        email = data[i++];
        // 生年月日
        birthDate = data[i++];
        // 性別
        sex = data[i++];
        // 業種ID
        gyoshuID = data[i++];
        // 経験年数
        nensu = data[i++];
        // 最終学歴
        gakureki = data[i++];
        // 希望単価
        tanka = data[i++];

        readMetaCulumns(data, i);
    }
}
取引先マスタ
class Torihiki extends Party {
    // URL
    private String url;
    // 担当者氏名
    private String tanto;
    // 締め日
    private String shimeDate;
    // 支払日
    private String shiharaiDate;

    // URL                          
    public String getUrl()          { return url;   }
    // 担当者氏名                   
    public String getTanto()        { return tanto; }
    // 締め日                       
    public String getShimeDate()    { return shimeDate; }
    // 支払日                       
    public String getShiharaiDate() { return shiharaiDate;  }

    public void fromArray(String[] data) {
        int i = 0;

        // 取引先ID
        id = data[i++];
        // 取引先名
        name = data[i++];
        // 郵便番号
        zip = data[i++];
        // 住所
        address = data[i++];
        // 電話番号
        tel = data[i++];
        // FAX番号
        fax = data[i++];
        // URL
        url = data[i++];
        // 担当者氏名
        tanto = data[i++];
        // e-mailアドレス
        email = data[i++];
        // 締め日
        shimeDate = data[i++];
        // 支払日
        shiharaiDate = data[i++];

        readMetaCulumns(data, i);
    }
}