Value Objectとは(VO)

Value Objectとは(VO)

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

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

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

こんなイメージです。

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

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;
}

view raw
S3Config.java
hosted with ❤ by GitHub

設定ファイル(application.yml)

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

view raw
application.yml
hosted with ❤ by GitHub

参考サイト

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA