TL;DR
- データを持たないケースだけの選択型は、DTO では一般に整数の列挙型で表現する。
- デシリアライズするときは、値が定義済みのものかを必ずチェックする。
内容
ドメイン型を DTO に変換する方法の 1 つである。
ドメインオブジェクトを、余計なデータを持たない選択型で表現することがある(型の合成)。
type Color =
| Red
| Blue
| Greenこのような型の DTO は、一般に整数の列挙型で表現する。
type Color =
| Red = 1
| Blue = 2
| Green = 3列挙型には定義していない整数も入りうるので、デシリアライズするときは、値が定義済みのものかを必ずチェックする。
let toDomain dto: Result<Color,_> =
match dto with
| Color.Red -> Ok Domain.Color.Red
| Color.Blue -> Ok Domain.Color.Blue
| Color.Green -> Ok Domain.Color.Green
| _ -> Error (sprintf "Color %O is not one of Red, Green, Blue" dto)キーワード
自分の理解
文字列で表現してもよいが、名前が変わったときに手間がかかる。