各ステップを実装する前に、単純型を実装する
各ステップを実装する前に、OrderId や ProductCode などの 単純型 を実装する必要がある 以下の 2 つの関数が必要
1. create 関数: プリミティブな値から型を構築する関数
2. value 関数: 内部値を返す関数
これらの関数は 単純型 と同じファイルに置き、適用する型と同じ名前のモジュールを使用する e.g.
code:fsharp
module Domain =
type OrderId = private OrderId of string
module OrderId =
let create str =
if String.IsNullOrEmpty(str) then
// とりあえず Result エフェクトを避けるため、例外を発生
failwith "OrderId must not be null or empty"
elif str.Length > 50 then
failwith "OrderId must not be more than 50 chars"
else
OrderId str
let value (OrderId str) =
str
上記のコードは使い回すので、抽象的な関数として切り出しておくと便利
code:fsharp
let createString name ctro maxLen str =
if String.IsNullOrEmpty(str) then
let msg = sprintf "%s must not be null or empty" name
failwith msg
elif str.Length > maxLen then
let msg = sprintf "%s must not be more than %i chars" name maxLen
failwith msg
else
ctro str