65487


こんなvalue objectを定義しようとしてますが、いわゆるvalue objectと違う感じなのでこういうのはありなのでしょうか。

[code]

    class PostMailBody {
      constructor(postBody, toName, fromName) {
        this.postBody = postBody
        this.toName   = toName
        this.fromName = fromName
      }
    
      function getValue() {
        return "$toName様 fromNameです。以下の記事を投稿しました! $postBody"
      }
    }
    
[/code]

いわゆるvalue
objectってPostMailBodyだったら、そのクラスがgetValueの返した値を持ってると思うのでこういうのはありなのか知りたいです。


CC BY-SA 4.0
2020-04-09T05:11:01.687
65483
2020-04-09T07:05:08.950
38235
question
ドメイン駆動設計 アーキテクチャ
複数の値からなるvalue objectってありですか?


全然ありです。  
1つの値とか、複数の値とかは、ValueObject（値オブジェクト）の定義上、関係ないです。

よくある例：

  * 「姓」と「名」の２つのフィールドから構成される「氏名」値オブジェクト
  * 「郵便番号」「都道府県名」「市区町村名」などの複数のフィールドから構成される「住所」値オブジェクト

なお、エンティティなのか値オブジェクトなのかは、構成要素が単一か複数かではなく、目的によります。  
「住所」がいつも値オブジェクトだとは限りません。

多分、普通の通販サイトでは、住所は値オブジェクトでしょう。  
きっと「ユーザ」エンティティの一構成要素ですね。  
住所オブジェクト同士の同一性は関心事になりません。  
ある家の夫と妻がそれぞれ注文したとして、その住所が同じであるかどうか、通販サイトの業務には関係ないので。

でも、運送会社になると事情は変わりそうです。  
ある２つの住所が同じであるならば、一度に配送したいですよね。  
つまり、住所の同一性が重要な関心事といえます。  
となると住所（というよりこの場合は「配送先」かな）はエンティティにしたくなると思います。

> いわゆるvalue objectってPostMailBodyだったら、そのクラスがgetValueの返した値を持ってると思う

この部分の意味がよく分かりませんでした・・・


CC BY-SA 4.0
2020-04-09T07:05:08.950
65487
2020-04-09T07:05:08.950
8078
65483
answer