ドメイン境界と責務
基本方針
EC-SPOKEシステムは、ドメイン駆動設計(DDD)の考え方に基づき、業務領域ごとにドメインを分割し、各ドメインが独立した責務を持つように設計します。
ドメイン分割の原則
- 業務の境界で分割: 各ドメインは明確な業務領域を担当し、他のドメインとの境界を明確に定義する
- 責務の独立性: 各ドメインは可能な限り独立して動作し、他のドメインへの直接的な依存を最小限に抑える
- 変更の影響範囲を限定: あるドメインの変更が他のドメインに及ぼす影響を最小限に抑える
- ビジネスロジックの集約: 各ドメインは自身のビジネスルールを内包し、外部からの不適切な操作を防ぐ
ドメイン間の連携
- イベント駆動: ドメイン間の連携はイベントを介して行い、直接的な呼び出しを避ける
- サービスインターフェース: ドメイン間で必要な連携は、明確に定義されたインターフェースを介して行う
- 共有カーネル: 複数のドメインで共通に使用される概念は、共有カーネルとして独立して管理する
ドメイン一覧と責務(最新版)
| ドメイン名 | ディレクトリ名 | 主な責務 | 代表エンティティ/機能 |
|---|---|---|---|
| Catalog | Catalog |
商品・SKU・在庫・価格・カテゴリ管理、検索インデックス同期。SKUごとに在庫・価格が 1:1 で紐づく前提。 | Product, ProductVariant, Inventory, Price, Category, Tag, Media |
| Order & Fulfillment | Order |
カート、注文、決済連携、配送・返品・返金、引当処理。 | Cart, Order, OrderItem, PaymentAttempt, Shipment, ReturnRequest |
| Customer & Organization | Customer |
会員・法人・担当者アカウント、アドレス帳、権限・ロール。 | Customer, Organization, OrganizationUser, Address, Role, Permission |
| Subscription | Subscription |
サブスクプラン、契約、課金スケジュール、再課金・解約。 | SubscriptionPlan, SubscriptionContract, BillingCycle, SubscriptionInvoice |
| Payment & Finance | Payment |
決済ゲートウェイ統合、請求書、与信、会計連携。 | PaymentProvider, TransactionLog, Invoice, Payout |
| Content & Engagement | Content |
CMS ページ、バナー、レビュー、通知・メッセージング。 | Page, Banner, Review, NotificationTemplate |
| Integration | Integration |
ERP/在庫/会計など外部システム連携、Webhook、パートナー API。 | IntegrationChannel, SyncJob, WebhookSubscription, ExternalMapping |
| Administration & Settings | Administration |
システム設定、テナント管理、Feature Flag(将来予定)、監査ログ。 | SystemSetting, Tenant, AdminUser, FeatureFlag, AuditLog |
| Analytics & Reporting | Analytics |
KPI 集計、データエクスポート、BI 連携、イベント追跡。 | MetricSnapshot, DataExport, AnalysisReport |
| Support(オプション) | Support |
問い合わせ管理、ケース/CS チケット。 | SupportTicket, TicketComment, EscalationRule |
責務分離のポイント
Catalog ドメイン
- 商品・SKU管理: 商品情報、バリエーション、カテゴリ、タグの管理を担当
- 在庫・価格管理: SKUと在庫・価格は常に1:1の関係であるため、Catalogドメインに含める
- 検索インデックス: 商品情報の検索インデックス更新を担当
- キャンペーン・クーポン: 条件付きの割引は、価格計算ロジックと密接に関連するため、必要に応じてサブディレクトリとして整理
Order & Fulfillment ドメイン
- 注文管理: カート、注文、注文明細の管理を担当
- 決済連携: 決済ゲートウェイとの連携を抽象化し、決済処理を担当
- 配送管理: 配送設定、出荷処理、配送状況の管理を担当
- 返品・返金: 返品申請、返金処理を担当
- 在庫引当: 注文確定時の在庫引当処理を担当(Catalogドメインの在庫情報を参照)
Customer & Organization ドメイン
- 会員管理: 個人会員の情報管理、認証・認可を担当
- 法人管理: 法人アカウント、担当者アカウントの管理を担当
- アドレス管理: 配送先・請求先住所の管理を担当
- 権限・ロール: ユーザーの権限・ロール管理を担当
Payment & Finance ドメイン
- 決済ゲートウェイ統合: 複数の決済プロバイダとの連携を抽象化
- 請求書管理: 請求書の発行、管理を担当
- 与信管理: 与信チェック、与信限度額の管理を担当
- 会計連携: 外部会計システムとの連携を担当
Subscription ドメイン
- サブスクプラン管理: プラン定義、料金設定を担当
- 契約管理: サブスク契約の締結、更新、解約を担当
- 課金スケジュール: 定期課金のスケジュール管理を担当
- 決済失敗リトライ: 課金失敗時のリトライ処理を担当
Integration ドメイン
- 外部システム連携: ERP、在庫管理、会計システムなどとの連携を担当
- Webhook管理: 外部システムからのWebhook受信、処理を担当
- パートナーAPI: パートナー向けAPIの提供を担当
- データ同期: 外部システムとのデータ同期処理を担当
Administration & Settings ドメイン
- システム設定: アプリケーション全体の設定管理を担当
- テナント管理: マルチテナント環境でのテナント管理を担当
- 監査ログ: システム操作の監査ログを記録・管理
- Feature Flag: 機能の有効/無効を制御(将来予定)
Analytics & Reporting ドメイン
- KPI集計: ビジネス指標の集計、分析を担当
- データエクスポート: レポートデータのエクスポート機能を提供
- BI連携: 外部BIツールとの連携を担当
- イベント追跡: ユーザー行動やシステムイベントの追跡を担当
運用ガイドライン
新機能追加時の判断基準
- 所属ドメインの決定: 新しい機能を追加する際は、まずどのドメインに属するかを判断する
- 既存のドメインに属する場合は、そのドメイン内に配置
- 複数のドメインにまたがる場合は、主要な責務を持つドメインを決定し、他のドメインとはイベントやインターフェースで連携
- 新しい業務領域の場合は、新規ドメインの創設を検討
ドメイン間の依存関係
- サービスインターフェース: ドメイン間の連携は、明確に定義されたサービスインターフェースを介して行う
- イベント駆動: 非同期処理や疎結合が必要な場合は、イベントを介した連携を採用
- 直接参照の最小化: 他のドメインのEloquentモデルを直接参照することを避け、必要最小限に抑える
共有機能の扱い
- 共有カーネル: 複数のドメインで共通に使用される概念は、共有カーネルとして独立して管理
- 横断的関心事: ログ、監査、設定など横断的な関心事は、Administrationドメインまたは共有基盤として管理
この構成により、B2C を起点としながら D2C/B2B/マルチテナントへの拡張にも対応できる柔軟なアーキテクチャを維持できる。
関連ドキュメント
- アプリケーション構造 - 具体的なディレクトリ構成と配置方針
- 全体アーキテクチャ - システム全体のアーキテクチャ設計