ドメインモデル
最終更新: [ 更新日を記載 ]
概要
本文書では、システムの業務領域(ドメイン)におけるアクター、エンティティ、ビジネス概念、値オブジェクトを定義します。 設計全体の共通言語となる重要な用語集としても機能します。
アクター(Actor)
システム利用者
システムを利用する主要なユーザー
システムの基本機能を利用する権限を持つ
認証・認可機能により管理される
システム管理者
システムの運用・管理を行う管理者
データ管理、システム監視を担当
管理機能への高レベルアクセス権限を持つ
外部システム
本システムと連携する外部システム
API通信による情報交換を行う
各種サービス提供者との連携を担当
エンティティ(Entity)
ユーザー(User)
システムの利用者を表すコアエンティティ
一意のユーザーIDで識別される
ログイン状態、基本情報を持つ
商品(Product)
管理対象の商品・サービスを表すエンティティ
商品ID、名前、価格、在庫数を持つ
在庫管理と価格管理の責務を持つ
ショッピングカート(ShoppingCart)
顧客の購入予定商品を管理するエンティティ
ユーザーごとに1つのアクティブなカートを持つ
24時間の有効期限がある
カート商品(CartItem)
ショッピングカートに追加された商品アイテム
商品情報、数量、単価、小計を含む
同一商品は数量で調整される
コントローラ(Controller)
ユーザー管理
ユーザー情報の管理・更新
ユーザー権限の制御
アカウント状態の管理
ショッピングカート管理
カートへの商品追加・削除・数量変更
カート合計金額の計算
カート有効期限の管理
商品確保管理
カートに追加された商品を在庫から一時的に確保
他の顧客による購入を防ぐ
カートの有効期限まで確保される
購入手続き管理
カート内商品の決済処理
配送先指定、支払い方法選択
完了時にカートがクリアされる
バウンダリ(Boundary)
外部システム連携
外部システムとの通信
API連携による情報交換
システム間データ連携
在庫管理システム連携
外部在庫管理システムとの通信
リアルタイム在庫チェック
在庫確保・解放の処理
決済システム連携
外部決済システムとの通信
決済処理の実行
決済結果の受信・処理
ユーザーインターフェース
Webページ、APIエンドポイント
ユーザー操作の受付
システム状態の表示
ビジネス概念(Domain Concepts)
商品確保(Product Reservation)
カートに追加された商品を在庫から一時的に確保するビジネスルール
他の顧客による購入を防ぐ排他制御
カートの有効期限まで確保される
在庫(Stock/Inventory)
販売可能な商品の数量を表すビジネス概念
リアルタイムで更新される
カート追加時にチェックされる
セッション管理(Session Management)
ユーザーのログイン状態とカート状態の管理
セッション有効期限の制御
ログアウト時のカート保持ルール
価格計算(Price Calculation)
商品価格、税額、送料の計算ロジック
割引、クーポン適用の処理
通貨換算(必要に応じて)
値オブジェクト(Value Objects)
金額(Money)
価格、税額、合計金額を表現
通貨情報を含む
不変オブジェクト
数量(Quantity)
カート内商品の数量
在庫数量
正の整数値のみ許可
期限(ExpiryTime)
カート有効期限
セッション有効期限
タイムゾーン考慮
商品コード(ProductCode)
商品を一意に識別するコード
JANコード、SKUなどのフォーマット
バリデーションルールを含む
ユーザーID(UserID)
ユーザーを一意に識別する識別子
UUID形式またはシーケンシャル番号
不変オブジェクト
日時(DateTime)
システム内で使用される日時情報
タイムゾーン情報を含む
不変オブジェクト
ドメインモデル クラス図
classDiagram class User["ユーザー"] { +user_id: int +name: string +created_at: datetime +is_active: boolean -- +login() +logout() +checkCart() } class Product["商品"] { +product_id: int +name: string +price: decimal +stock_quantity: int +is_available: boolean -- +checkStock() +getPrice() +reduceStock() } class ShoppingCart["ショッピングカート"] { +cart_id: int +user_id: int +total_amount: decimal +created_at: datetime +expires_at: datetime -- +addProduct() +removeProduct() +calculateTotal() +isExpired() } class CartItem["カート商品"] { +item_id: int +cart_id: int +product_id: int +quantity: int +unit_price: decimal +subtotal: decimal -- +updateQuantity() +calculateSubtotal() } %% リレーション User ||--|| ShoppingCart : "owns" ShoppingCart ||--o{ CartItem : "contains" Product ||--o{ CartItem : "referenced by"
ユースケース図
graph LR ユーザー --> |商品検索| 商品検索処理 ユーザー --> |カート追加| カート管理処理 ユーザー --> |購入手続き| 購入処理 管理者 --> |商品管理| 商品管理処理 管理者 --> |在庫管理| 在庫管理処理 外部システム --> |在庫確認| 在庫管理処理 外部システム --> |決済処理| 購入処理
用語集
用語 |
定義 |
備考 |
---|---|---|
ユーザー |
システムを利用する人 |
顧客、管理者を含む総称 |
商品 |
販売・管理対象となるアイテム |
物理的商品、サービス、デジタルコンテンツを含む |
カート |
購入予定商品の一時保存場所 |
ショッピングカートの略称 |
在庫 |
販売可能な商品の数量 |
リアルタイムで変動する |
セッション |
ユーザーのログイン状態 |
一定時間で自動無効化 |
決済 |
購入代金の支払い処理 |
外部システムとの連携で実現 |
関連文書
設計文書:
ユーザーストーリー 一覧 - ユーザーストーリー一覧
ユースケース 一覧 - ユースケース一覧
データベース設計 - データベース設計
DDD(Domain-Driven Design)設計 - DDD設計
プロジェクト管理:
プロジェクト憲章
要求仕様書