2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🏛 **【Google流】ドメイン駆動設計(DDD)実践ガイド - 複雑なマイクロサービスを秩序立てる技術** 🏛

Posted at

👨💻 はじめに

Google Cloudで大規模マイクロサービスシステムの設計を担当するエンジニアの田中です。今回の「アルゴリズム&設計パターン」シリーズでは、ドメイン駆動設計(DDD)を実プロジェクトで活用するための実践的ノウハウを、Google内部の事例を交えて解説します。

特に、「戦略的設計」と「戦術的設計」のバランスや、マイクロサービスとの相性に焦点を当て、理論だけではない現場で使えるテクニックを紹介します。

📌 この記事で学べること:

  • ドメインエキスパートとエンジニアの共通言語作り
  • 境界づけられたコンテキストの実際の分割例
  • イベント駆動アーキテクチャとの組み合わせ

🔥 1. DDDの核心「戦略的設計」3つの柱

1. ユビキタス言語の構築

  • 例: 決済システムの場合
    [ビジネス用語] → [実装用語]  
    「取引」 → Transactionエンティティ  
    「精算」 → Settlementドメインサービス  
    

2. コンテキストマッピング

コンテキストマップ

  • Google内部事例:
    [注文コンテキスト] --(公開ホストサービス)--> [決済コンテキスト]  
    

3. コアドメインの特定

  • 投資配分の目安:
    コアドメイン: 60%リソース  
    サポートドメイン: 30%  
    汎用ドメイン: 10%  
    

💎 2. 実装レベルの「戦術的パターン」

エンティティ vs 値オブジェクト

// エンティティ例  
class User {  
    private UserId id; // 識別子  
    private String name;  
}  

// 値オブジェクト例  
class Money {  
    private final BigDecimal amount;  
    private final Currency currency;  
}  

ドメインサービスの適切な使い方

  • 条件:
    ・複数エンティティに跨るロジック  
    ・リポジトリを依存する場合  
    

🚀 3. マイクロサービスとの統合パターン

サービス分割の黄金律

1チーム(5-9人) = 1コンテキスト = 1-3マイクロサービス  

イベント駆動アーキテクチャ

# 注文完了イベントの発行  
class OrderService:  
    def complete_order(self, order):  
        self.event_publisher.publish(  
            OrderCompletedEvent(order.id, order.total)  
        )  

🎯 まとめ:DDD成功の3原則

  1. ビジネスと技術の共通言語を作る
  2. コンテキスト境界を明確に定義
  3. コアドメインに集中投資

💬 あなたのDDD実践体験をコメントで共有してください!
次回は「バックエンドエンジニア必見!REST API設計のベストプラクティス」を解説予定です。

Googleの設計ホワイトボード
(画像キャプション: Googleのドメインモデリングセッション)

「参考になった!」と思ったら♡やリポストをお願いします! 🚀

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?