Slide 13
Slide 13 text
副作用を分離
決める(純粋)と書く(副作用)に分ける。「決める」はモックなしでテストできる
// 決める: 入力から「何が起きたか」を作る純粋な関数
function decide(input: OrderInput, now: Date): OrderPlaced {
const order = Order.create(input, now);
return { order, events: [{ type: "OrderPlaced", orderId: order.id }] };
}
// 書く: 決めた結果を解釈して I/O を実行する
async function placeOrder(input: OrderInput): Promise {
const { order, events } = decide(input, clock.now());
await repository.save(order);
await publisher.publish(events); // メールとログは購読側へ
return order;
}
TypeScript
13/41