mcpField
D
ddd-clean-architecture

ddd-clean-architecture

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

ddd-clean-architecture について

Clean Architecture と DDD に基づくアプリケーション設計を支援する開発者向けスキルです。レイヤー間の依存関係やテスト方針を解説します。

主な機能

  1. 014 層アーキテクチャの指針
  2. 02依存ルールとレイヤー境界
  3. 03DDD のエンティティとユースケースの対応
  4. 04パッケージとテストの整理

活用シーン

  1. 01レイヤー構造のアプリケーション設計
  2. 02コントローラーへの業務ルール配置の回避
  3. 03テストしやすい I/O インターフェースの定義

インストール

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

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

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

同梱ファイルLICENSE.txt

詳細

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

次のような場合に、このスキルを使用します。

  • クリーンアーキテクチャのレイヤー(エンティティ、ユースケース、インターフェースアダプター、フレームワーク)に従ってアプリケーションを構成したい
  • 依存関係のルールを徹底したい(内側のレイヤーは外側のレイヤーに依存しません)
  • プロジェクトのパッケージを整理し、明確なテスト境界を定義したい
  • クリーンアーキテクチャとドメイン駆動設計のパターンを組み合わせたい

このスキルの使い方

ワークフロー
  1. エンティティを定義する(最内層のレイヤー)。企業全体に適用されるビジネスルールを含めます
  2. ユースケースを定義する(アプリケーションレイヤー)。アプリケーション固有のビジネスロジックを含めます
  3. インターフェースアダプターを作成する(プレゼンター、ゲートウェイ)。レイヤー間のデータを変換します
  4. フレームワークを実装する(最外層)。Web、データベース、UI に関する処理を担います
レイヤー構造
com.example.app/
├── entity/              # Entities — business rules, no dependencies
├── usecase/             # Use Cases — application logic, depends only on entity
│   ├── port/            # Input/output port interfaces
│   └── interactor/      # Use case implementations
├── adapter/             # Interface Adapters — presenters, gateways
│   ├── controller/      # Web controllers
│   ├── presenter/       # Response formatting
│   └── gateway/         # Gateway implementations
└── framework/           # Frameworks — DB, web server, external APIs
    ├── web/
    └── persistence/
ユースケースの例
// Use case port (input boundary)
public interface CreateOrderUseCase {
    OrderOutput execute(CreateOrderInput input);
}

// Use case interactor
public class CreateOrderInteractor implements CreateOrderUseCase {
    private final OrderGateway orderGateway;
    private final PaymentGateway paymentGateway;

    public CreateOrderInteractor(OrderGateway orderGateway, PaymentGateway paymentGateway) {
        this.orderGateway = orderGateway;
        this.paymentGateway = paymentGateway;
    }

    @Override
    public OrderOutput execute(CreateOrderInput input) {
        Order order = Order.create(input.getItems());
        paymentGateway.charge(order.totalAmount());
        orderGateway.save(order);
        return OrderOutput.from(order);
    }
}
ゲートウェイインターフェース(ユースケースレイヤーで定義)
public interface OrderGateway {
    void save(Order order);
    Optional<Order> findById(String id);
}

ベストプラクティス

  • ビジネスルールはエンティティとユースケースに集約し、コントローラーやデータベースレイヤーにビジネスロジックを配置しないでください
  • インターフェースを使って I/O を分離します。これにより、コアを置き換えやすく、テストしやすくなります
  • エンティティとユースケースは、DDD の集約やドメインサービスに自然に対応します
  • コアレイヤーはユニットテストでテストし、外側のレイヤーは統合テストまたは E2E テストでテストします

リソース

キーワード

クリーンアーキテクチャ、依存関係のルール、ユースケース、エンティティ、インターフェースアダプター、ゲートウェイ、レイヤー分離、DDD、テスト容易性

コメント