TL;DR
- Modeling Workflows as Pipelines で設計したパイプラインを F# で実装する。
- 各ステップを独立した関数として実装してから、それらを関数合成する。合成を難しくする依存関係とエフェクトのうち、この章では依存関係を扱う。
内容
実装の 2 つの段階
実装は 2 つの段階に分かれる。
- パイプラインの各ステップを、独立した関数として実装する。各ステップはステートレスで副作用がないようにし、独立してテストし理解できるようにする。
- 1 で作った関数を合成する。
ただし、次の 2 つの理由から、関数は簡単には合成できない。
- 依存関係: パイプラインの一部ではないが、実装に必要な追加のパラメータがある。この章では、関数型プログラミングで依存性の注入と同じことを実現する方法を扱う。
- エフェクト: 出力に
Resultのようなエフェクトを使うと、中身のデータを入力とする関数と合成できない。これは第10章 Implementation: Working with Errors で扱う。
実際にコードを書くときも、本書の流れと同じように、Result や Async などのエフェクトを気にせず、まずすべてのステップを実装するとよい。そうすれば合成の基本に集中できる。
実装の流れ
- 前準備
- 各ステップを実装する前に、単純型を実装する(
SimpleTypes.fsなど、実装とは別のファイルに書く)
- 各ステップを実装する前に、単純型を実装する(
- 各ステップの実装
- ステップの合成
- テスト
ファイルの構成
ファイルはワークフローごとに作る。
module ワークフロー名 =
// 1. 設計 (型定義)
// 2. 各ステップの実装
// 3. メインとなるワークフローの関数