---
# System prepended metadata

title: 2021-05-13 第13回メンターセッション
tags: [Team-2]

---

# 2021-05-13 第13回メンターセッション

## 項目

### 集約ルートは必ずエンティティになるか
- エンティティ以外を集約ルートにした場合はない
- 原典にはエンティティのみと書かれている
- 絶対にエンティティでなければならない訳ではないが、極力エンティティにすべき

### ファクトリで行うバリデーションとドメインオブジェクトで行うバリデーション
- ファクトリメソッド
    - ドメインオブジェクトが持つ
    - static Createがバリデーションを行い、private construcotorはバリデーションをしない
    - コンストラクタはthrow以外エラーを表現できない
    - ファクトリメソッドならundefinedやnullを返すことができる -> throwは極力使わない
- ファクトリクラス
    - ドメインオブジェクトの生成サービス

TypeScriptの場合、ファクトリから作ることを強制するのは命名、チームへの周知で行うしかやったことがない

### 別集約のドメインオブジェクトが必要な処理において、引数としてオブジェクトを受け取るかIDだけを受け取るか
- ユースケース次第なところがあるが、IDだけで良いのではないか
    - 引数がIDの場合、そのIDが正しいか担保できない → ドメインサービスが担保する

### 永続化したものを再構築する場合、バリデーションはスキップするべきか

- ドメインルールの変更で不正なデータが生まれた場合、バッチで更新すればよいと思う
- なので、再構築するときもバリデーション作っても良いと思う
- 不整合を許すのであれば、バージョンなどを用意して、不整合を許すドメインにするという手もある
- 表示だけのデータならドメインオブジェクトを使わずDTOを使う

### crudの戻り値はどうするべきでしょうか？
- 松原さんはvoid派/松岡さん本もvoid/成瀬さん本もvoid
- 保存されたことを確認したいなら保存した後に再度Getすれば良い

### DBにある設定値をアプリ側ではどのように扱うべきでしょうか？

- アプリケーションで型を持つことが多い
- 型とマスタデータの役割の違い
    - 型 … ビルド時の異常を知らせてくれる、開発者をサポートするためのもの
    - マスタ … アプリケーションの整合性を保つためのもの
    - なので両方あってもヨシ！
- 型があればマスタいらないのでは？説
    - 更新がないならそうかも
        - 都道府県
    - 持っておいて損がないなら、持っておいたほうがいいかも
    - 型で用意するのは、あくまで開発をしやすくするため
    - 型を用意してもanyを渡したら破壊できるので、その可能性には注意

### ドメインオブジェクトにおいて、コンストラクタで行うバリデーション処理を同じドメインオブジェクト内の別メソッドでも処理したい場合、どのようにすればよいでしょうか

- private staticにして定義するのはあり
- ただし、このメソッドは継承可能にしてはならない
    - 継承したクラスがそのメソッドをオーバーライドすると、コンストラクタが破壊される

###### tags: `Team-2`
