エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Java】通常のクラスではなく、意味のあるクラスに書き換える【862日目】

今回の差分のコミット

github.com

通常のクラスを使っていた

// tableを作成
List<List<String>> table = new ArrayList<List<String>>();
List<String> th_row = new ArrayList<String>();

このように、Listなどの標準のクラスを使っていました。

変数の名前だけに意味を持っていたので、各クラスを新しく定義しました。

クラスを定義

package id_start_springboot.start_springboot.presentation.model;

import java.util.Iterator;
import java.util.List;

// イミュータブルなバリューオブジェクト
public class Table implements Iterable<Row> {
    // フィールド
    private List<Row> rows;

    // コンストラクタ
    public Table(List<Row> rows) {
        this.rows = rows;
    }

    @Override
    public Iterator<Row> iterator() {
        return this.rows.iterator();
    }
}

何が嬉しい?

このTableに対して、全てを取得するメソッドと、Headだけを取るメソッドなど、
Tableに対しての処理をTableに持たせて、他のクラスに内部構造を意識させた処理を書かせる必要がなくなります。

呼び手は、必要なクラスを呼び出すだけで良くなって、見通しとメンテナンス性が上がりますね。

これが出来るのは、構造の単位でクラスを持つのではなく、意味の単位でクラスを構成しているからこそですね。

次の課題

Tableクラスの要素として、今回はRowだけで構成しましたが、
Headと、Bodyがあるのでこちらを書き換えましょう。

このときHeadは一見Rowで構成されそうですが、たまたま一緒の構成であって、
同一の存在じゃないので注意。

それ用に名前を考えて作りましょうφ(・