🦈
値オブジェクトについて
※文章は現場で役立つシステム設計
例えば電話番号
電話番号には次のようなルールがあります。
- 使える文字種は数字だけ
- 市外局番は"0"で始まる
- 合計の桁数は10桁
- 形式は"市外局番-市内局番-加入者番号"
- 加入者番号は4桁固定
- 先頭の"0"を除いた市外局番市外局番は1桁から4桁
この電話番号を扱う変数を、String型型で宣言しただけでは以下の意味になる。
- 文字の種類は数字だけでなく漢字でも記号でも何でも良い
- 長さは無制限
- 形式は自由
電話番号をstringで扱うと不正な値が入ってしまい、思わぬバグの原因になる。
解決策→値を扱うための専用のクラスを作る
電話番号はstring型でなく、独自にTelephone型としてクラス宣言する。
電話番号として妥当な長さや文字種のルールを、Telephone型としてクラス宣言する。
電話番号を扱うときは、必ずTelephone型のオブジェクトとして扱えば、正しいデータであることが保証できる。
Telephone型のように目的に特化した「型」として宣言し、利用することで、ソースコードは見違えるように意図的に明確になり、動作も安定する。
「電話番号」は単なるStringではない。
このように、
値を扱うための専用のクラスを作るやり方を値オブジェクト(valueObject) と呼ぶ。
参考になるコード(サイト
Discussion