はじめに
ドメイン駆動設計(DDD)って、言葉が難しくてとっつきにくい…。
でも、もしそれを「RPGの世界」で例えられたら?
勇者・仲間・装備・クエスト——これらを使って、設計の考え方を楽しく学んでみましょう!
※実は、ここ数年、ドメイン駆動設計に取り組みたいなと思っているのだけど、僕の周りでは話題にすらならない状況。
そこで周りの人に布教活動をしようと思いたち、DDDに興味を持ってもらうためにこの記事を書きました!
勇者と剣:エンティティと値オブジェクト
村の広場に立つ勇者アレン。
彼は「銅の剣(攻撃力30)」を装備して旅立ちます。
このとき、設計視点は以下になります。
| 概念 | RPGでの例 | 特徴 |
|---|---|---|
| エンティティ | 勇者アレン | 一意のIDを持ち、状態が変化しても同一人物 |
| 値オブジェクト | 銅の剣(攻撃力30) | 属性の集合体。同じ属性なら同じものとみなす |
パーティ構成:集約とルート
勇者アレンは魔法使いリリィ、僧侶カイとパーティを組みました。
この「パーティ」が、DDDでいう集約。
その代表者がルートです。
| 概念 | RPGでの例 | 説明 |
|---|---|---|
| 集約 | パーティ全体 | 勇者・仲間・装備などの一貫したまとまり |
| ルート | 勇者アレン | 外部からの操作はこの代表者を通じて行う |
クエスト:ユースケースとアプリケーションサービス
魔王討伐というクエストを進めるには、ゲームマスターが流れを調整します。
この「クエストの流れ」がユースケース、ゲームマスターが担う役割がアプリケーションサービスです。
| 概念 | RPGでの例 | 説明 |
|---|---|---|
| ユースケース | 魔王討伐クエスト | システムの目的と振る舞い |
| アプリケーションサービス | ゲームマスター | 外部との橋渡し役 |
ギルドの名簿:リポジトリ
ギルドマスターが名簿から勇者を探すように、DDDではリポジトリを使ってエンティティを保存・検索します。
| 概念 | RPGでの例 | 説明 |
|---|---|---|
| リポジトリ | 冒険者ギルドの名簿 | 勇者や装備の情報を保存・検索する |
魔法の巻物:ドメインサービス
「魔法の巻物」は誰でも使える便利な道具。
これは、特定の職業に属さないが重要な処理を担うドメインサービスの例です。
| 概念 | RPGでの例 | 説明 |
|---|---|---|
| ドメインサービス | 魔法の巻物 | 職業に属さない重要な処理 |
まとめ
ドメイン駆動設計は、RPGで例えると「登場人物」「目的」「道具」「ルール」を整理すること。
この記事は楽しさを優先して、用語を説明する程度にしています。
物足りない人は、もっと詳しい解説や書籍などに取り組んでみてはいかが。