値オブジェクトとは

プログラムでシステム固有の値を表現するために定義されたオブジェクトを値オブジェクトという

(例)

氏名の表現

$fullName = 'kurogi takumi';
echo $fullName; // kurogi takumiが表示される

姓だけを表示する

$fullName = 'kurogi takumi';
$tokens = explode(' ', $fullName);
$lastName = $tokens[0];
echo $lastName; // kurogi が表示される

うまく姓を表示できないパターン

$fullName = 'john smith';
$tokens = explode(' ', $fullName);
$lastName = $tokens[0];
echo $lastName; // john が表示される

「john smith」のように姓が後方に配置される氏名も存在するので上記のプログラムでは正確に姓を表現できない。

こういった問題を解決する手段としてオブジェクト指向プログラミングのクラスが利用される

class FullName {
	public string $firstName;
	public string $lastName;
	
	public function __construct(string $firstName, string $lastName)
	{
		$this->firstName = $firstName;
		$this->lastName = $lastName;
	}
}

$fullName = new FullName('john', 'smith');
echo $fullName->lastName;

このFullNameクラスが氏名を表現したオブジェクトで値の表現。

オブジェクトでもあり、値でもあるドメイン駆動設計ではこのようにシステム固有の値を表現したオブジェクトを値オブジェクトと呼んでいる。

値の性質と値オブジェクトの実装

値オブジェクトを学ぶ前に値の代表的な性質の確認。下記の3つの性質がある