この記事では、ドメイン駆動設計をはじめよう(以下、本書)の中で語られている「区切られた文脈」(Bounded Context)について、レンタルサーバー事業を例に、特定方法とビジネス活動をモデル化する手順について考えていきます。
1. 区切られた文脈とは?
「区切られた文脈」とは、ビジネスの各領域を分割し、機能ごとに一貫した用語やルールを定義することで、システムの複雑さを管理するための設計手法です。この概念は、ビジネスの異なる領域がそれぞれ異なる要求やロジックを持つことを前提にしています。
たとえば、レンタルサーバー事業では、顧客の契約管理、サーバーの運用、料金の請求、サポートといった異なる業務領域が存在し、それぞれの領域で扱う情報やプロセスが異なります。このような状況で、一つのシステムに全てを統合すると、管理が複雑になり、変更に対する柔軟性が低下します。
本書では、こうした異なる領域を「区切られた文脈」として独立させ、各文脈ごとに専用のモデルを持たせることが推奨されています。これにより、各領域が自律的に機能し、全体の複雑さを抑えながら効率的なシステムを構築できるようになります。
2. 区切られた文脈の特定方法
本書に基づいて、区切られた文脈を特定するプロセスは以下の手順で進められます。
ステップ 1: ビジネス活動の洗い出し
レンタルサーバー事業におけるビジネス活動は、さまざまな領域が混在しています。契約処理やサーバーの設定、顧客対応、請求など、複数の業務が存在します。たとえば、顧客との契約はプラン選択を伴い、サーバーをどう運用するかという技術的な問題も含まれます。また、契約が更新された場合の対応や、サポートの問い合わせもビジネス活動に含まれるでしょう。
それ以外にも、請求書の発行や支払い状況の確認、顧客からの問い合わせに対する技術サポート、サーバーのメンテナンスやトラブルシューティングといった業務も存在します。こうしたビジネス活動を洗い出すことで、全体像が見えてきますが、それぞれの活動は直接的には関連しないことが多く、整理が必要です。
ステップ 2: 業務領域ごとの関係性を分析する
次に、各業務領域がどのように相互に関連しているかを分析します。契約管理と請求管理は密接に関係しており、契約内容に基づいて請求額が計算されます。また、サーバー運用管理は契約情報に基づいてサーバー設定を行いますが、請求管理には関与しません。
一方、サポート業務はサーバーの状態を把握し、顧客とのやり取りをサポートするために、サーバー運用管理や契約管理からの情報を必要とします。このように、各領域の依存関係を把握することで、どのようなデータのやり取りが必要かを理解し、区切られた文脈を適切に定義できます。
ステップ 3: 区切られた文脈の定義
本書では、各業務領域を「区切られた文脈」として明確に分離し、それぞれ独自のルールとデータモデルを持たせることが推奨されています。これにより、文脈間の依存を最小限にし、独立して運用可能なシステムを構築することができます。
- 契約管理文脈:契約情報の管理、プランの選択や契約更新、解約の処理を行う
- サーバー運用文脈:サーバーの設定やメンテナンス、パフォーマンス監視を行う
- 請求管理文脈:契約情報に基づいて料金を計算し、請求書を発行する
- サポート文脈:顧客からの問い合わせ対応、技術サポートを提供する
これにより、各文脈が独立して機能し、変更に強いシステムを構築することができます。
3. ビジネス活動のモデル化
本書では、特定された区切られた文脈を元に、具体的なビジネス活動をソフトウェアとしてモデル化する手法についても詳述されています。ここでは、エンティティ、集約、サービス、リポジトリといったDDDの基本的な概念を使って、モデル化を進めます。
ステップ 1: エンティティと集約の特定
各文脈内での主要なビジネスオブジェクトをエンティティとして特定します。レンタルサーバー事業では、以下のようなエンティティが考えられます。
- 顧客エンティティ:顧客情報(名前、連絡先など)を保持
- 契約エンティティ:顧客が契約したプランや契約期間、料金などの情報を管理
- サーバーエンティティ:サーバーの設定や状態を管理
- 請求エンティティ:契約内容に基づいて生成される請求情報を管理
集約は、これらエンティティをグループ化し、一つの単位として扱います。たとえば、「契約集約」は、顧客エンティティと契約エンティティを含み、契約に関連するすべての情報を管理します。
ステップ 2: ビジネスロジックの定義
本書では、各集約に対して適用されるビジネスロジックの定義が重要であるとされています。たとえば、契約管理文脈では、契約が更新されるたびに通知を送るロジックや、プラン変更時にサーバー設定を即座に反映させるロジックが必要です。
- 契約更新ロジック:契約終了の30日前に自動的に顧客に通知を送信し、更新を促します。
- プラン変更ロジック:顧客がプランを変更した際、即座にサーバー設定と請求金額を更新します。
ステップ 3: サービスとリポジトリの設計
「サービス」は、ビジネスロジックを集約内に実装する役割を果たします。たとえば、契約更新サービスでは、契約情報を操作し、必要に応じて顧客への通知やサーバー設定の更新を行います。
また、「リポジトリ」は、エンティティや集約をデータベースに保存し、必要に応じて取得するためのパターンです。これにより、データの永続化が効率的に行われ、各文脈間のデータ操作が統一されます。
まとめ
この記事では、ドメイン駆動設計をはじめようの内容を踏まえ、レンタルサーバー事業における「区切られた文脈」の特定方法とビジネス活動のモデル化について考えました。区切られた文脈を特定し、適切に管理することで、システムの柔軟性と保守性を高めることが可能です。本書のアプローチを実際に適用することで、システム設計の強固な基盤を構築できると思います。