複雑な入力と出力の処理
関数は 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
code:fsharp
type CalculatePricesInput = {
OrderForm : OrderForm
ProductCatalog : ProductCatalog
}
type CalculatePrices = CalculatePricesInput -> PricedOrder
どちらが良いか
すべての入力が常に必須であり、互いに強く結びついている場合のみレコード型
別々のパラメータとして渡すことで、依存性の注入 が可能になる