TL;DR
内容
型の合成で見た型システムを使って、ドメインをモデリングする。
レコード型によるモデリング
AND で組み合わせるドメインモデルは、レコード型で表せる。
type Order = {
CustomerInfo : CustomerInfo
ShippingAddress : ShippingAddress
BillingAddress : BillingAddress
OrderLines : OrderLine list
AmountToBill : ...
}未知の型のモデリング
設計の初期段階では、型の名前は分かっていても、中の構造が分からないことがある。そのときは、明示的に未定義の型としてモデリングする。F# では、例外型の exn に Undefined という別名を付けるとよい。
type Undefined = exn
type CustomerInfo = Undefinedこうしておけば、ドメインのモデリング中もコードをコンパイルできる。
選択型によるモデリング
OR で選ぶドメインモデルは、選択型(判別共用体)で表せる。
type ProductCode =
| Widget of WidgetCode
| Gizmo of GizmoCode