ドメイン駆動設計(DDD)を実践する上で、C#のようなオブジェクト指向言語からF#のような関数型の言語へ移行すると、振る舞いに着目できることとより宣言的なコードになることのふたつの利点がある、とLev Gorodinski氏は言う。氏は最近のプレゼンでイベントソーシングとCommand-Query Responsibility Separation(CQRS)を例に挙げて説明した。
Lev氏は昨年、F#を使い込み、この8ヶ月はF#しか使っていない。氏のプセゼンではGreg Young氏のオリジナルのCQRSのサンプルを使って、どのようにしてF#の実装がC#と違うのかを説明し、利点と難点を明らかにした。
典型的なオブジェクト指向言語でCQRSのサンプルを開発することで、Lev氏はいくつかの論点を見つけた。例えば、冗長さやエンティティがイベントソースの実装に依存することだ。
F#の実装には利点がある、コードは少なくて済み、明確で、隠れた副作用なして関数が何をするのかはっきりわかる。
F#でDDDを実践するには利点がある。実装に必要なインフラではなく振る舞いに着目できる。つまり、CRUD的な発想を捨てられるのだ。また、より宣言的なコードにできる。コードを書く代わりに宣言的な仕様をF#で実装できるのだ。
Lev氏が指摘するのは、このような利点はすべてDDDの利点であり、Eric Evans氏の本でもVaughn Vernon氏の本でも書かれている。
F#に移行したときの難点は新しいパラダイムだった、と氏は言う。始めたときはC#スタイルのコーディングをしてしまい、これを克服して関数が他言語のプログラミングスタイルに移行するのには時間がかかった。関数型もオブジェクト指向もサポートする言語なので、どちらで書けばいいのか判断が難しい場合もあった。