こんにちは、エンジニアの小紫です。 今携わっているプロジェクトで採用しているScalaでの実装テクニックを紹介します。 これはなに レイヤードアーキテクチャにおけるドメイン層の実装から、関数型プログラミングの力を使って実装の都合を取り除いてピュアなドメイン実装を目指します。 そのリファクタリングの過程を解説していきます。 キーワード的にはDDD、レイヤードアーキテクチャ、Monadあたり。 ScalaMatsuri2018の@AoiroAoinoさんの発表に多大なる影響を受けています。ありがとうございます! purely_functional_play_framework_application 解決したい問題 DDD + レイヤードアーキテクチャ(Clean Architectureとか含む)で開発しているときに普通にやってるとドメイン、例えばのRepositoryのコードは以下のように