システム開発について調べていると、「ドメインモデル」という言葉を目にすることがあります。
少し難しそうな言葉ですが、簡単にいうと、ドメインモデルは次のようなものです。
そのシステムが対象とする業務で扱うものごとに、「関連するデータ」と「そのデータに関係する処理やルール(ロジック)」をひとまとめにして表現したもの
この記事では、ドメインモデルとは何なのかを、初心者向けにわかりやすく解説します。
そもそも「ドメイン」とは?
ここでいうドメインとは、次のような意味です。
そのシステムが対象としている業務や活動の領域
例えば、ネットショップのシステムであれば、「商品を販売する業務」がドメインになります。このドメインには、次のようなものが登場します。
- 商品
- 顧客
- 注文
- 支払い
- 配送
また、次のような業務上のルールもあります。
- 在庫がなければ注文できない
- 支払いが完了したら商品を発送する
- 発送後は注文をキャンセルできない
このような、「商品を販売するために必要なものごと」や「業務上のルールを含む領域全体」が、ネットショップシステムにおけるドメインです。
そして、そのドメインに登場する「商品」「顧客」「注文」「支払い」「配送」などについて、「関連するデータ」や「そのデータに関係する処理やルール(ロジック)」を表現したものがドメインモデルです。ただし、ドメインモデルは「商品」や「注文」などを単独で表したものだけを指すわけではありません。複数のものごとの関係や、それらがどのように連携するかを含めて、ドメインモデルとして表現することもあります。
ドメインモデルとは?
ドメインモデルとは、次のようなものです。
ドメインに登場するものを、「関連するデータ」と「そのデータに関係する処理やルール(ロジック)」で表現したもの
例えば、ネットショップの「注文」というドメインモデルには、次のような情報があります。
「注文」に関連するデータ
- 注文番号
- 合計金額
- 注文した顧客
- 注文の状態
さらに、次のような処理やルールも表現します。
そのデータに関係する処理やルール(ロジック)」
- 合計金額を計算する
- 注文を確定する
- 注文をキャンセルできるか判断する
- 注文をキャンセルする
このように、「関連するデータ」だけでなく、「そのデータに関係する処理やルール(ロジック)」も一緒に表現するのが、ドメインモデルの特徴です。
「注文」のドメインモデルをクラス図で表す
ドメインモデルは、図や文章、クラス図などを使って整理することもできます。実際にシステムを開発するときには、その内容をクラスやオブジェクトなどとして、プログラム上に表現します。
例えば、「注文」のドメインモデルをクラス図で表すと、次のようなイメージです。

ドメインモデルとデータモデルの違い
ドメインモデルと似た言葉に「データモデル」があります。この2つは、目的が異なります。
データモデルとは、簡単にいうと、次のようなものです。
どのようなデータを持ち、データ同士をどのように関係させるかを表したもの
例えば、ネットショップの注文データであれば、次のような項目を考えます。
- 注文ID
- 顧客ID
- 注文日時
- 合計金額
- 注文状態
さらに、次のようなデータ同士の関係も整理します。
- 1人の顧客が複数の注文を行う
- 1つの注文に複数の商品が含まれる
- それぞれの商品には商品IDがある
データベースを設計するときには、このデータモデルをもとに、テーブルや項目、テーブル同士の関係を作ります。
一方、ドメインモデルは、「データ」だけでなく「そのデータに関係する処理やルール(ロジック)」も表します。
簡単にまとめると、次のようになります。
| 項目 | ドメインモデル | データモデル |
|---|---|---|
| 各モデルの特徴 | 「データ」と「そのデータに関係する処理やルール(ロジック)」を表す | どのようなデータを持ち、データ同士をどのように関係させるかを表す |
| 主な目的 | 業務の仕組みやルールを表現する | データの構造や関係を整理する |
| 扱うもの | データ、処理、業務上のルール | データ項目、データ同士の関係 |
| 注文の例 | 合計金額を計算する、注文を確定する、キャンセルできるか判断する | 注文ID、顧客ID、合計金額などの項目と、それらの関係を整理する |
まとめ
ドメインモデルとは、次のようなものです。
そのシステムが対象とする業務で扱うものごとに、「関連するデータ」と「そのデータに関係する処理やルール(ロジック)」をひとまとめにして表現したもの
ドメインモデルは、図や文章、クラス図などを使って整理できます。実際にシステムを開発するときには、整理した内容をクラスやオブジェクトなどとして、プログラム上に表現します。
お読みいただきありがとうございました。