TL;DR
- タプルはほとんどのシリアライズフォーマットで扱えないので、DTO ではレコード型で表現する。
内容
ドメイン型を DTO に変換する方法の 1 つである。タプルはほとんどのシリアライズフォーマットが対応していないので、要素ごとにフィールドを持つレコード型で表現する。
// ドメイン
type Suit = Heart | Spade | Diamond | Club
type Rank = Ace | Two | Queen | King | ...
type Card = Suit * Rank // タプル
// DTO
type SuitDto = Heart = 1 | Spade = 2 | Diamond = 3 | Club = 4
type RankDto = Ace = 1 | Two = 2 | Queen = 12 | King = 13 | ...
type CardDto =
{ Suit: SuitDto
Rank: RankDto }Suit と Rank は列挙型を DTO に変換すると同じく整数の列挙型にしている。