BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 関数型言語を使ったドメイン駆動設計

関数型言語を使ったドメイン駆動設計

原文(投稿日:2014/03/25)へのリンク

ドメイン駆動設計 (DDD) で関数型プログラミング言語を使用するときは、多くの場合で実際のコードが簡単になり、ドメインモデルをドメイン専門家と議論する際に使うこともできると、Scott Wlaschin関数型ロンドン市民グループの最近の会議で述べた。講演内容は、実アプリケーションにおいてF#を使った関数型プログラミングを用い、ドメインモデリングを適用することについてであった。

Scottは .NET アーキテクトであり、 "Understanding Functional Programming" の著者だが、オブジェクト指向開発者にとって関数型プログラミングが怖く思えることがあることを分かっている。怖く思えるのは奇妙なバズワード、すなわちファンクタ、アプリカティブ、モナドなどのせいであるが、実際にはそれらの用語に単になじみがないだけなのだと彼は主張している。Scottによれば、逆にオブジェクト指向プログラミングであっても謎の概念が出てくるので怖いものである。例えばポリモーフィズム、ジェネリック、継承、共変性など。彼の考えでは、関数型プログラミングは実際には簡単なものであり、なぜなら意識するべき概念が少ないからである。これを強調するため、彼はプレゼンテーション中の例で、これらの概念を一つも使用していない。

Scottが体験した範囲では、次のように考える開発者が多かった。関数型プログラミングは、数学や科学の領域の問題を解決するためには良いが、あまりにも複雑であり、一般的な実世界のアプリケーションに適してはいない、と。しかし彼は、退屈な業務アプリケーション (BLOBA) 開発にもF#は非常に良いと考えている。F#はとても簡潔だし、定型コードを書かずに済む多くの便利機能や、正確性を保証する型システムを有しているためである。

ドメイン駆動設計においてF#とC#を比較し、値オブジェクトとエンティティの両方のコード例を見てみれば、多くの場合F#の方がはるかに簡単なコードになるとScottは主張している。時々は、実際のコードがあまりにシンプルなので、ドメイン専門家と共にドメインモデルを議論したり、コードをレビューしたりする際に使われることさえある、とのことである。UMLの図や別のモデルを使うのではなく。

Scottは、F#の型システムを説明する際に次のことを示した。型は、型チェックのためのアノテーションであることに加えて、ドメインモデリングツールとして使い、設計を表現することもできる。また、コンパイラが型をチェックするので、型システムはコンパイル時のユニットテストとみなすことができる。

良い静的型システムとは、コンパイル時にユニットテストをしているようなものだ。

Scottの結論は、関数型ファースト開発には、F#が低リスクで安全な選択であるという主張である。その主要な論拠は、マイクロソフトに裏打ちされていることによる。

この記事に星をつける

おすすめ度
スタイル

BT