LoginSignup
1
1

More than 5 years have passed since last update.

ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第五章 ソフトウェアで表現されたモデル8(値オブジェクト モデル・実装)

Last updated at Posted at 2017-10-04

値オブジェクト モデル・実装

値オブジェクトについて、モデル・実装面で注意することは、"不変であること"1点ですね。

値オブジェクトが不変であることは概念的には、

値オブジェクトはいわゆる物なので、一度オブジェクトを作ったら変更しないのが原則。都道府県で言えば、「東京都」は「宮崎県」に変更できないということです。

前回確認したとおりですが、実装面では、変更の管理が単純である。という利点があるでしょう。

不変でない場合、メモリ上参照先が同じオブジェクトを複数作ってしまった場合、片方が変更された場合、元も変更されてしまいます。しばしば、それは意識しないところで不意にやられてしまうことがあります。
しかも、これってなかなか見つけづらいんですよね・・・

以下は、実装例です

MailAddress.java
class MailAddress{
  final String value;

  MailAddress(String value){
    this.value = value;
  }

  MailAddress modify(String newValue){
    return new MailAddress(newValue)
  }

  int hashCode(){
    ...
  }

  boolean equals(Object other){
    ...
    return this.value.equals(other.value)
  }
}

equalsの実装は属性の値が一致していればtrueになるようにしています。メールアドレスの値が同じならば、当然同じであるはずですよね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1