PagerDutyのElixir上でビジネスロジックを一元化した話がおもしろかった
次の記事を読みました。
一見最初のコードも何の問題もないように見えます。 全体としてやりたいことはできてるし、それぞれのモジュールも割とシンプル。
でも、注意深く見るとビジネスロジックとしての判断が複数のモジュールに散らばっているのが分かります。
- Parserがexpireかどうかを見てエラーを出している(中身の意味を解釈して、判断してしまっている)
- Senderが返ってきたレスポンスを受け取り、成功失敗を判断し、次のロジック(DBモジュールへの保存)を呼んでいる
説明にフォーカスするために例がシンプルになっているけど、さらにビジネスロジック多い場合、 問題があったときにどこをみたらよいかや、新たなビジネスロジックを追加したいときに目星をつける場所に迷うのが目に浮かびます。
一元化されたコードはビジネスロジックを書く場所が1箇所なのでその辺の迷いがなくなっています。
こういうときに with
句が便利。
with
については次の記事も参考になります。with
に渡すパターンマッチを工夫することでエラーケースをうまく分岐しています。
Elixir’s with statement is fantastic - AgentRisk: Superhuman Wealth Management
さらに複雑なビジネスロジックパイプラインを記述できるライブラリ、Opusも興味深い。小さなプロジェクトで試してみたい。