関数型ドメインモデリング

naoya氏やmotemen氏の記事で知った「Domain Modeling Made Functional」の、待望の日本語翻訳が発売された。少し遅れて、電子版が発売されるのを待って購入。

本書の導入では、ドメインエキスパートと開発チームが、ユビキタス言語を使ってコミュニケーションとりながら、ドメインモデリングを行っていく流れを疑似体験できるようになっている。ユビキタス言語はコードでも使われる。コードと親和性高い英語のネイティブはズルいと思えてしまうな。コードを書く際に日本語で命名したくなってくる。

実装編では、状態を型で定義し、関数を組み合わせてワークフローを構築していく。ワークフローは関数だし、ワークフローを構成するサブワークフローも関数。関数型プログラミングで頭を悩ましやすいIOの扱いについては、IOをワークフローの両端に追いやることで解決を試みていた。データベースやストレージへの依存は、引数で受け取るようにし、部分適用で隠す。自分の趣味嗜好的には、オブジェクト指向よりは関数型のほうが好みだな。

自分のメイン言語であるC#でどう実践するかを考えながら読み進めた。C#には選択型がないので、状態を型でどう表現するのかが一番の課題かな。継承を応用して、Unionぽいことはできるけど。部分適用するためにはカリー化も必要。 単純型はrecordがあるから書きやすくはなっている。レールウェイ駆動はやり過ぎかも。コンピュテーション式があるF# でも結構面倒くさい。このやり方は言語のサポートありきで、サポートが無い言語ではかなりの労力が追加で発生しそうだな。

本書の提案をすべてを採用とはいかないが、取り入れられそうなところから始めていきたい。