値オブジェクトとは

はじめに

現在、クリーンアーキテクチャの勉強をしています。勉強や開発の中で、あまり用語や内容を理解していないことに気づきました。そこでもっと抽象的なDDDについて調べようと思いました。DDDについてネットで調べているとクリーンアーキテクチャの考え方と違う点もあると言うことだったので、その点も追々比較していきたいと思います。
今回はDDDの「値オブジェクト(VO)」について書いていきたいと思います。

値オブジェクトは

値オブジェクトとは、intやbooleanなどと同じような役割を持ったシステムのオブジェクトになります。intやbooleanなどはプリミティブ型と言われていて、プログラミングでよく使う型です。値オブジェクトはプリミティブ型と同じように以下の特徴を持っています。

  • 不変

  • 交換可能

  • 等価性の比較

不変

ここで言う不変は、中身の値が変わらないということです。
例えば、int型「1」の中身の値を1→2に変更できたとします。そうすると、
1+1 = 4 
という不自然な結果になってしまいます。
不変になることで、上記のような不自然な結果を起こさないようにすることができます。

交換可能

値オブジェクトは不変です。なので、オブジェクトの中身を変更するのではなく、オブジェクトを取り替えながら使用していきます。
例えば、
int a = 1 
a = 2
 のように,
Money money  = new Money(1)
money = new Money(2)

等価性の比較

プリミティブ型の変数を比較するときは以下のようにします。
1 < 2
上記のように値オブジェクトでも中身を取り出して比較するのではなく、それ自体を比較するようにします。
Money money1 = new Money(1)
Money money2 = new Money(2)
money1 < money2

このようにできることで、Moneyに新しいプロパティが追加されても、比較のために値オブジェクトのクラス以外に修正は必要なくなります。

まとめ

今回は、DDDの本を読んで値オブジェクト(VO)について書いてみました。
実際の開発でもVOを使う機会があるので、勉強した内容を反映していきたいと思います。


この記事が気に入ったらサポートをしてみませんか?