複雑な入力と出力の処理
from 関数によるワークフローのモデリング
関数は 1 つの入力と 1 つの出力しかないが、ワークフローには複数の入力と出力(ドメインイベント)があるものがある
これをどうモデリングするか
複数の出力
それらをすべて出力するケース
すべてを格納できる レコード型 を用いる
code:fsharp
type PlaceOrderEvents = {
AcknowledgmentSend : AcknowledgmentSend
OrderPlaced : OrderPlaced
BillableOrderPlaced : BillableOrderPlaced
}
いずれかを出力するケース
選択型 を用いる
code:fsharp
type EnvelopeContents = EnvelopeContents of string
type CategorizedMail =
| Quote of QuoteForm
| Order of OrderForm
// etc
複数の入力
同じワークフローに異なる入力の選択肢があるケース
選択型 を用いる
複数の入力がすべて必須のケース
各入力を別々のパラメータとして渡す
type CalculatePrices = OrderForm -> ProductCatalog -> PricedOrder
関数によるワークフローのモデリング#6697672575d04f000075efce と同じようにレコード型を作成する
code:fsharp
type CalculatePricesInput = {
OrderForm : OrderForm
ProductCatalog : ProductCatalog
}
type CalculatePrices = CalculatePricesInput -> PricedOrder
どちらが良いか
すべての入力が常に必須であり、互いに強く結びついている場合のみレコード型
別々のパラメータとして渡すことで、依存性の注入 が可能になる