モデル、ドメインモデル、モデリングとは | これで理解できるドメイン駆動設計!
Prev: ドメインとは
モデルとは
ドメインと同じように「モデル」もビジネスアナリシス(要求分析)分野の言葉で、その分野の本に定義が出てきます。
モデル(model)
現実を単純化して表現したもの。特定の受け手に情報を伝達し、分析とコミュニケーションと理解を支援するために作成する。
ビジネスアナリシス知識体系ガイド (BABOKガイド)Version2.0 p.236
これはソフトウェア開発に限らず、一般に使われるモデルという言葉と意味は同じです。ミニチュアモデルは車や建物の色や形を維持したまま、機能や大きさを欠落させたモノです。ビジネスモデルはそのビジネスがどのようにして収益を上げるのかを説明し、実際に何人働いているかとかどのような設備があるかと言った情報を欠落させた図や文章のことです。
このように、モデルとは伝えたい事柄について、受け手に必要な情報を伝達しつつ、不要な側面は含んでいないモノや図、文章、数式などで表現されたもののことです。
普通、モデルとは呼ばれませんがショッピングモールの入り口にあるフロアマップもモデルということができます。何階のどこにどういうお店があるのかという位置関係を維持したまま、実際のお店がどんな外観なのかといった詳細は省いています。料理のレシピもモデルと言えるかもしれません。必要な材料と使う器具、手順が書かれていますが、細かい部分の大きさは何cmだとか何分焼くとかそういう部分は大雑把に説明されています。料理が苦手な自分としては、ちゃんと説明してほしいと思うこともままありますけども。
ドメインモデルとは、モデリングとは
「ドメイン」はソリューションを提供するために調べ、考え、分析する必要のある、ありとあらゆる物事が存在する範囲のことだと前章のドメインとはで書きました。
「モデル」とは先に書いた通り、伝えたい事柄について、受け手に必要な情報を伝達しつつ、不要な側面は含んでいないモノや図、文章、数式などで表現されたもののことです。
「ドメインモデル」はそのまま、ドメインを分析した結果を伝えるために作成するモデルのことです。
「モデリング」はドメインモデルを作成する活動のことです。
転職サイトを例に考えてみます。転職サイトを作るために転職ドメインを分析します。求職者には自分の情報を登録してもらう必要があり、それがどのような情報なのか考える必要があります。
登録してもらう情報をリストアップしたら、今度はその情報がどういうデータ構造になっているのかを考えます。クラス図を使ってもER図を使っても良いですが、データの関連がわかる図を作成します。
このER図によって、求職者の情報というドメインの中にある情報が、どのようなデータの関連なのかモデリングすることができました。
改めてドメインを分析するということとモデリングという活動の関係を図にまとめると以下のようになります。ドメインを分析するとは、ドメインの中の物事について考え、考えたことをまとめ、ドメインモデルを作成するまでを指します。モデリングは考えたことをまとめる活動の一部とドメインモデルを作成することを指します。考えたことをまとめる活動の一部というのは、その成果物の一部がドメインモデルとなることがあるからです。
Next: ドメイン駆動設計とは
違います。明確に違います。全然違います。大事なことなので三回言いました。
一つ目の勘違いは、ドメインモデルはあくまで「ドメインの中の情報を分析してみると、こういうデータの関連があるぞ」という分析結果をER図などにしただけであって、「こういうテーブル構造にするぞ」という意図で作成するものではないということです。
テーブル設計は利用するデータベースの性質であったり、他の情報との関連の影響を受けるはずです。場合によってはテーブルなんてなくて、外部サービスのAPIにJSONを投げる形で保存するのかもしれません。
しかし、そういったデータベースレベルの都合とは無関係に、ドメインの中の物事のデータ構造というのは存在します。データモデルというドメインモデルは、そのデータ構造を明らかにしたモデルのことなのです。この章で考えた求職者情報の「経験年数」の「言語・ツール名」は、テーブル設計なら「言語・ツール名」というテーブルも作って外部キーにしているところでしょう。でも、ドメインモデルという意味では言語・ツール名を識別できる何らかの情報であれば十分です。
二つ目の勘違いは、ドメインモデルはデータモデルのことだけではないということです。ドメインの中の物事をデータモデルだけで表現し切ることはできません。「転職して1ヶ月経ったらお祝い金を求職者に支払う」というビジネスルールは文章で表現する他ないですし、「応募や辞退と言ったステータス」を表現するなら状態遷移図を使うでしょうし、ドメイン特有の値があるなら表でまとめるのが向いています。ドメインモデルを表現する方法はER図やUML、状態遷移図といった書式の定まった図も含むし、フリーフォーマットの文書や表なども含まれます。
どういうドメインモデルが存在するかはモデリング手法で言及します。
Next: ドメイン駆動設計とは