mcpField
D
ddd-microservices

ddd-microservices

github.com/partme-ai開発71681 回インストール3 週間前に更新
リポジトリ

ddd-microservices について

ドメイン駆動設計でマイクロサービスを設計する開発者向けのスキルです。サービス境界、集約、通信方式、データ所有権、一貫性戦略を扱います。

主な機能

  1. 01境界づけられたコンテキストをサービスに対応
  2. 02集約とドメインイベントの定義
  3. 03同期・非同期通信の選択
  4. 04サービスごとのデータ所有権の設定
  5. 05結果整合性と Saga パターンの計画

活用シーン

  1. 01分割前にサービス境界を特定
  2. 02REST、gRPC、イベントの契約を設計
  3. 03サービス間の一貫性を計画
  4. 04サービスごとのデータベース所有権を定義

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/partme-ai/full-stack-skills --skill ddd-microservices

インストール後、Claude Code で/ddd-microservicesを入力して読み込まれたか確認します。

同梱ファイルLICENSE.txt

詳細

このスキルを使うタイミング

ユーザーが以下を希望する場合は、このスキルを使います。

  • DDDを使用してマイクロサービスの境界(境界づけられたコンテキスト、集約、ドメインイベント)を定義する
  • サービス間のコントラクトとイベント駆動型の通信を設計する
  • サービス間の整合性、クエリ、運用戦略を実装する
  • 同期通信(REST/gRPC)と非同期通信(イベント/メッセージング)のどちらを使うか判断する

このスキルの使い方

ワークフロー
  1. 境界づけられたコンテキストをマッピングして、自然なサービス境界を特定します
  2. 各サービス内の集約を定義して、データの整合性を確保します
  3. 通信を設計します。クエリと強い整合性には同期通信を、疎結合には非同期通信(ドメインイベント)を使用します
  4. データの所有権を確保します。各サービスが独自のデータベースを所有し、APIまたはイベントを通じてデータを共有します
1. 境界づけられたコンテキストからサービスへのマッピング
E-Commerce Domain:
├── Order Service        ← Order bounded context
│   ├── Order aggregate
│   └── OrderPlaced event
├── Inventory Service    ← Inventory bounded context
│   ├── Product aggregate
│   └── StockReserved event
├── Payment Service      ← Payment bounded context
│   ├── Payment aggregate
│   └── PaymentCompleted event
└── Notification Service ← Cross-cutting
    └── Subscribes to all domain events
2. 同期通信(Feign/gRPC)
@FeignClient(name = "inventory-service")
public interface InventoryClient {
    @GetMapping("/api/products/{id}/stock")
    StockInfo getStock(@PathVariable String id);
}
3. 非同期通信(ドメインイベント)
// Order Service publishes
@Transactional
public void placeOrder(PlaceOrderCommand cmd) {
    Order order = Order.create(cmd);
    orderRepository.save(order);
    eventPublisher.publish(new OrderPlacedEvent(order.getId(), order.getItems()));
}

// Inventory Service subscribes
@EventListener
public void onOrderPlaced(OrderPlacedEvent event) {
    inventoryService.reserveStock(event.getItems());
}
4. サービスごとのデータベース
Order Service      → order_db (PostgreSQL)
Inventory Service  → inventory_db (PostgreSQL)
Payment Service    → payment_db (PostgreSQL)

ベストプラクティス

  • サービスに分割する前に境界づけられたコンテキストを明確に定義し、早まった分割を避けます
  • 集約間およびサービス間の事実を表現するにはドメインイベントを使用し、冪等性と順序を確保します
  • 各サービスについて、明確なSLA、データの所有権、障害の境界を定義します
  • 分散トランザクションよりも、補償トランザクション(Sagaパターン)を用いた結果整合性を優先します

リソース

キーワード

DDD、マイクロサービス、境界づけられたコンテキスト、集約、ドメインイベント、サービス境界、Sagaパターン、CQRS、サービスごとのデータベース、結果整合性、APIゲートウェイ

コメント