ドメインモデルとは?初心者向けにわかりやすく解説!

システム開発について調べていると、「ドメインモデル」という言葉を目にすることがあります。

少し難しそうな言葉ですが、簡単にいうと、ドメインモデルは次のようなものです。

そのシステムが対象とする業務で扱うものごとに、「関連するデータ」と「そのデータに関係する処理やルール(ロジック)」をひとまとめにして表現したもの

この記事では、ドメインモデルとは何なのかを、初心者向けにわかりやすく解説します。

そもそも「ドメイン」とは?

ここでいうドメインとは、次のような意味です。

そのシステムが対象としている業務や活動の領域

例えば、ネットショップのシステムであれば、「商品を販売する業務」がドメインになります。このドメインには、次のようなものが登場します。

  • 商品
  • 顧客
  • 注文
  • 支払い
  • 配送

また、次のような業務上のルールもあります。

  • 在庫がなければ注文できない
  • 支払いが完了したら商品を発送する
  • 発送後は注文をキャンセルできない

このような、「商品を販売するために必要なものごと」や「業務上のルールを含む領域全体」が、ネットショップシステムにおけるドメインです。

そして、そのドメインに登場する「商品」「顧客」「注文」「支払い」「配送」などについて、「関連するデータ」や「そのデータに関係する処理やルール(ロジック)」を表現したものがドメインモデルです。ただし、ドメインモデルは「商品」や「注文」などを単独で表したものだけを指すわけではありません。複数のものごとの関係や、それらがどのように連携するかを含めて、ドメインモデルとして表現することもあります。

ドメインモデルとは?

ドメインモデルとは、次のようなものです。

ドメインに登場するものを、「関連するデータ」と「そのデータに関係する処理やルール(ロジック)」で表現したもの

例えば、ネットショップの「注文」というドメインモデルには、次のような情報があります。

「注文」に関連するデータ

  • 注文番号
  • 合計金額
  • 注文した顧客
  • 注文の状態

さらに、次のような処理やルールも表現します。

そのデータに関係する処理やルール(ロジック)」

  • 合計金額を計算する
  • 注文を確定する
  • 注文をキャンセルできるか判断する
  • 注文をキャンセルする

このように、「関連するデータ」だけでなく、「そのデータに関係する処理やルール(ロジック)」も一緒に表現するのが、ドメインモデルの特徴です。

「注文」のドメインモデルをクラス図で表す

ドメインモデルは、図や文章、クラス図などを使って整理することもできます。実際にシステムを開発するときには、その内容をクラスやオブジェクトなどとして、プログラム上に表現します。

例えば、「注文」のドメインモデルをクラス図で表すと、次のようなイメージです。

ドメインモデルのクラス図

ドメインモデルとデータモデルの違い

ドメインモデルと似た言葉に「データモデル」があります。この2つは、目的が異なります。

データモデルとは、簡単にいうと、次のようなものです。

どのようなデータを持ち、データ同士をどのように関係させるかを表したもの

例えば、ネットショップの注文データであれば、次のような項目を考えます。

  • 注文ID
  • 顧客ID
  • 注文日時
  • 合計金額
  • 注文状態

さらに、次のようなデータ同士の関係も整理します。

  • 1人の顧客が複数の注文を行う
  • 1つの注文に複数の商品が含まれる
  • それぞれの商品には商品IDがある

データベースを設計するときには、このデータモデルをもとに、テーブルや項目、テーブル同士の関係を作ります。

一方、ドメインモデルは、「データ」だけでなく「そのデータに関係する処理やルール(ロジック)」も表します。

簡単にまとめると、次のようになります。

項目ドメインモデルデータモデル
各モデルの特徴「データ」と「そのデータに関係する処理やルール(ロジック)」を表すどのようなデータを持ち、データ同士をどのように関係させるかを表す
主な目的業務の仕組みやルールを表現するデータの構造や関係を整理する
扱うものデータ、処理、業務上のルールデータ項目、データ同士の関係
注文の例合計金額を計算する、注文を確定する、キャンセルできるか判断する注文ID、顧客ID、合計金額などの項目と、それらの関係を整理する

まとめ

ドメインモデルとは、次のようなものです。

そのシステムが対象とする業務で扱うものごとに、「関連するデータ」と「そのデータに関係する処理やルール(ロジック)」をひとまとめにして表現したもの

ドメインモデルは、図や文章、クラス図などを使って整理できます。実際にシステムを開発するときには、整理した内容をクラスやオブジェクトなどとして、プログラム上に表現します。

お読みいただきありがとうございました。

スポンサーリンク