Value Objectとは(VO)

Value Objectとは(VO)

何気にVOとかDtoとかネーミングしていたけどValue Objectというとマーチンファウラーさんのサイトがわかりやすいです。

オレオレ翻訳するとフィールドにはコンストラクタでのみ値を設定(もしくはそれ専用のメソッド)し、フィールドはイミュータブル(不変)であることがValue Objectクラスのあるべき定義みたいです。

setterなどで後から値が変更できる設計のクラスではダメで、インスタンス生成時に全て設定がされているクラス設計というイメージでしょうか。

public final class Takahashi {
  private final int age;
  private Takahashi(int age) {
    this.age = age;
  }
  public static Takahashi of(int age) {
    return new Takahashi(age);
  }
  public int getAge() {// getterで取得
    return this.age;
  }
}

こんなイメージです。

Takahashi t = Takahashi.of(10000);
System.out.println(t.getAge());

結果は以下のようになります。

10000

lombokでいう@Value

lombokでいう@Valueアノテーションをクラスに書くとprivate finalなフィールドとgetterのみのアクセサが用意されます。setterを用意してしまうとDIした後に書き換えることが出来てしまいます。

設定ファイルのクラス(S3Config.java)

package jp.co.confrage.config;

import java.util.Map;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import lombok.Value;

@Component
@ConfigurationProperties(prefix = "spring.aws.s3")
@Value
public class S3Config {
  private final Map<String, String> bucket;
  private final Map<String, String> keys;
}

設定ファイル(application.yml)

spring:
  aws:
    s3:
      bucket:
        name: mybucket
      keys:
        sceneslist: var/db/%s.json
        papilist: etc/settings.json

参考サイト

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました