CureApp開発者ブログ

アプリで治療する未来を創造するCureApp, Inc. のエンジニアブログです

JavaScriptでDDD(ドメイン駆動設計) その1 変数名一覧を作ろう

DDD(ドメイン駆動設計)とは?

語弊を恐れずに言いますと、 開発したいアプリケーションにおいて、関心領域のビジネスロジックだけを抽出し、独立させる設計手法のことです。

DDDの定義に関しては、日本語のとてもよい記事がありますので、こちらを参照するとよいでしょう。 Domain-Driven Designのエッセンス

ちなみにJavaScript、と書きましたが、DDDは設計手法でありプログラミング言語によらないはずです。 弊社がJavaScriptでDDDを実践した、という経験を共有させていただきたいというだけです。

DDDを実践するにあたっては、そのバイブルであるエリック・エヴァンス氏の有名な本 をなぞることも重要だと思います。

ここではこの本に書いていることのコピーではなく、 実際にDDDを実践してみたことの記録を書きます。

名前をつける

今回はその最も基本的な話、名前をつけるところの話です。

プログラミングをしていて、変数名に迷うことは日常茶飯事ですが、 それが専門用語だとなおさらです。

例えば「タバコを吸いたい気持ち」のこと。 ある開発者は「wantTobacco」と表現してしまい、別の開発者は「desire」と表現してしまいました。 実際には「craving」という専門用語がありましたが、どちらもそのような単語があることなど知りませんでした。

そうしてできた全体のコードには統一感がなく、バグの温床となります。

これを防ぐために、弊社はドメインエキスパート(弊社の場合は医師)と対話し、コンセンサスを得た単語表を用意しました。 表にあるのは、日本語、英語とそれに対応する変数名です。

f:id:cureapp-dev:20151007112640p:plain

エリック・エヴァンスドメイン知識関連の用語をまとまりを「ユビキタス言語」と言っています。

決められるのではなく、対話

ドメインエキスパートが頭に思い描いているものは、実はかならずしもクリアではありません。 概念がぼやけていることもあります。

実装する前の段階でそれらを洗い出しておくことが重要です。

実際に弊社は、「行動療法」(という概念があるのですが割愛)の主語が誰なのか、 ということを医師と開発者で何十分も議論する、といったことがありました。

そういった対話を通じて、お互いが不明な点をクリアにしていくことで、 ユビキタス言語だけでドメイン知識(関心領域の知識)を表現できるようになっていきました。

次回は「ドメイン知識を分離する」ことについてお話します。

CureAppはDDDに興味のあるソフトウェアエンジニアを募集しています。