TL;DR

  • AND で組み合わせるデータはレコード型で、OR の選択肢は判別共用体で表す。
  • 中身がまだ分からない型は、明示的に未定義の型としておけば、モデリング中もコンパイルできる。

内容

型の合成で見た型システムを使って、ドメインをモデリングする。

レコード型によるモデリング

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

キーワード