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)

キーワード

自分の理解

文字列で表現してもよいが、名前が変わったときに手間がかかる。