ドメイン駆動設計の実践:モデリングと設計の基本ツール

UML?


モデリングのツールは、思考のツールであり、関係者でお互いの考えていることをすり合わせ確認する道具です。
オブジェクト指向のモデリングツールといえば、UMLが有名です。クラス図やオブジェクト図、ユースケース図など、視覚的に、かつ、論理性を保って、モデルを検討し、視覚化するための約束事をまとめたものですね。


ドメイン駆動設計のモデリング手段


エヴァンスのドメイン駆動設計は、UML流の図がいくつか掲載されていますが、本を読んでいただければわかる通り、UMLを使ったモデリングのやり方は、基本的に登場しません。


ドメイン駆動設計のモデリングの基本手段は「言葉」です。それも、文章ではなく、会話によるモデリングを非常に重視しているのが、ドメイン駆動設計の特徴です。(2章を参照)


図や文章表現は、あくまでも補助的な手段。「言葉」を聞いた時の違和感、「言葉」をしゃべったときの感触。この人間の言語能力、会話能力を、ドメインを理解し、ドメインの要点を明確にするために最大限に活用する。それがドメイン駆動設計のモデリングのアプローチです。


モデルと実装を結びつける


人間の言語能力を駆使して作り出した「モデル(ドメインの要点)」を、プログラミング言語で表現することが、ドメイン駆動設計の実践の核心です。


つまり、ドメイン駆動設計を実践するための基本スキルは次の2つです。



  • 自然言語を、できるだけ正確に使う

  • プログラミング言語を、データ処理の記述手段ではなく、モデルの表現手段として使う


自然言語を正確に使う


モデリングのツールとして自然言語を活用するには、あいまいさや矛盾はできるだけ減らさなければいけません。たとえば、「あれ」「これ」「だいたい」のような、何気なく口にする言葉を、一つ一つ、より明確な言葉に置き換えて言い直します。「取引先」と「取引相手」という似た言葉がでてきたら、同じ意図なのか、別の意図があるのか、注意深く確認します。


そうやって、言葉に耳を傾け、自分で言葉にしてみて、あいまいさや矛盾がないかをいつも気にするのが、ドメイン駆動設計のモデリング活動です。


言葉を使ったモデリングで、私が注意していることが2つあります。一つは、「カタカナ禁止」。カタカナ言葉は、人によって解釈の違いが大きいので、ぎこちなくても、日本語の別の言葉に置き換えることを徹底します。もう一つは「繰り返し語ってみる」です。言葉で正確に表現できていれば、同じことをしゃべれば、同じ言い回しになるはずです。しかし、実際には、同じように語ることは意外に難しい。たとえば、チームで議論しているときに、「私も前の人の発言と同じ理解です」とかいう人がいる。で、その人に「同じでいいから言葉にしてみて」というと、まるで違ったことをしゃべりだす。意図も伝わっていないし、共通理解とはほど遠いことを思い知らされます。


こういうことに気を付けながら、「言葉」を正確に使うように意識してモデリングを進めるのが、ドメイン駆動設計のモデリングの基本です。


プログラミング言語でモデルを表現する


言葉にあいまいさが減り、それなりに納得できるモデルが手に入ったら、それをプログラミング言語で表現してみます。


これがまた難しい。私たち技術者は、プログラミング言語を、基本的にはコンピュータにデータ処理をさせるための道具として習得してきています。自然言語で表現されたモデルを、そのまま写し取るための道具としての経験がありません。


ドメイン駆動設計では、自然言語を使って洗練した「モデル」(理解や知識)を、プログラミング言語で、直接的に表現することを重視します。概念モデルと実装モデルを正確に一致させることが、ドメイン駆動設計の目標の一つです。


そのためには、データ操作をするための詳細を隠ぺいすること、クラス名、メソッド名、パッケージ名に、技術的な発想を混ぜないこと、などを相当に意識してやる必要があります。また、クラス間の構造も、技術的な整合性や技術者にとっての慣れ親しんだパターンに設計しがちです。しかし、自然言語で表現されたモデルは、そういう発想やパターンとは基本的に異なっています。技術的な発想としては、違和感があるが、モデルを素直に表現するとしたら、こういう実装になるという方向に、いろいろ検討することが、ドメイン駆動で設計する基本的な活動です。


オブジェクト指向の発想にはもともとは、人間の関心事や概念を、そのままコンピュータ上で表現することを重視していました。しかし、現実には、オブジェクト指向言語を使ったソフトウェア開発は、人間の考えていることを素直に表現する手段としてよりは、コードをわかりやすく整理し、変更容易性やコードの再利用生を高める手段として、広がってきました。


ドメイン駆動設計は、そういう意味で、オブジェクト指向の原点に立ち戻ったものと言えます。オブジェクト指向の基本を丁寧に学び直すことが、人間の考えていることを直接的にプログラミング言語で表現しようという、ドメイン駆動設計の実践の近道です。


ワークショップ(有料)のご案内


宣伝です。


ドメイン駆動設計の基本である「言葉を使ったモデリング」と「モデルをプログラミング言語で表現する」を、体験的に学べるワークショップを開催します。


(6月18日(土)と6月25日(土)の二日間)


実践的ドメイン駆動設計ワークショップ(第4回)

2週連続の土曜日開催で、有料なので、気軽に参加はできないかもしれませんが、それだけの価値がある講座です。ご興味がある方は、ぜひ、ご参加ください。そして、このブログに書いてきた内容を、私といっしょに、いろいろ議論しながら、ぜひ体験してみましょう。ご参加をお待ちしています。


calendar
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
<< October 2016 >>
システム設計日記を検索
プロフィール
リンク
システム開発日記(実装編)
有限会社 システム設計
twitter @masuda220
selected entries
recent comment
recent trackback
categories
archives
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM