Open2

ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本 の読書メモ

yukiko_bassyukiko_bass

Chapter 2 システム固有の値を表現する「値オブジェクト」

2.1 値オブジェクトとは

  • 「FirstName」「LastName」を持ったクラス(オブジェクト)「FullName」のように、このクラス自体が値であり、オブジェクトである。そのように値を複数合わせて、システム固有の値として意味を持たせるクラスを『値オブジェクト』と呼ぶ。

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

  • 値の性質は3つ
    • 不変である
      • 「0」は「0」であり、「こんにちは」は「Hello」にはならない、ということ(哲学みたいだな)
    • 交換が可能である
      • いつもやっているような変数の値を変更しているようなことは、値の代入である。
      • 値オブジェクトの変更は値と同じように代入によって交換を表現する
      • 逆に、不変オブジェクトであるがゆえに、代入による交換でしか、値の変更はできない。
       // 値オブジェクトの変更方法
       var fullName = new FullName("John", "Smith");
       fullName = new FullName("John", "Williams");
      
    • 等価性によって比較される