Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

domain-driven-design

エンティティ、値オブジェクト、集約、ドメインサービス、リポジトリ、仕様、境界づけられたコンテキストなど、複雑なビジネスモデリングに対応するDDDの戦術的パターンを提供します。PythonのdataclassによるImplementationとTypeScriptの代替実装に対応しており、リッチなドメインモデルの構築、不変条件の強制、またはドメインロジックとインフラストラクチャの分離が必要な際に活用してください。

description の原文を見る

DDD tactical patterns for complex business modeling including entities, value objects, aggregates, domain services, repositories, specifications, and bounded contexts. Python dataclass implementations with TypeScript alternatives. Use when building rich domain models, enforcing invariants, or separating domain logic from infrastructure.

SKILL.md 本文

Domain-Driven Design 戦術パターン

エンティティ、値オブジェクト、境界付けられたコンテキストで複雑なビジネスドメインをモデル化します。

概要

  • 複雑なビジネスロジックのモデリング
  • ドメインとインフラストラクチャの分離
  • サブドメイン間の明確な境界の確立
  • ビジネスロジックを含むリッチドメインモデルの構築
  • ユビキタス言語をコードに実装

ビルディングブロック概要

┌─────────────────────────────────────────────────────────────┐
│                    DDD Building Blocks                       │
├─────────────────────────────────────────────────────────────┤
│  ENTITIES           VALUE OBJECTS        AGGREGATES         │
│  Order (has ID)     Money (no ID)        [Order]→Items      │
│                                                              │
│  DOMAIN SERVICES    REPOSITORIES         DOMAIN EVENTS      │
│  PricingService     IOrderRepository     OrderSubmitted     │
│                                                              │
│  FACTORIES          SPECIFICATIONS       MODULES            │
│  OrderFactory       OverdueOrderSpec     orders/, payments/ │
└─────────────────────────────────────────────────────────────┘

クイックリファレンス

エンティティ(アイデンティティを持つ)

from dataclasses import dataclass, field
from uuid import UUID
from uuid_utils import uuid7

@dataclass
class Order:
    """Entity: アイデンティティを持つ、可変状態、ライフサイクル。"""
    id: UUID = field(default_factory=uuid7)
    customer_id: UUID = field(default=None)
    status: str = "draft"

    def __eq__(self, other: object) -> bool:
        if not isinstance(other, Order):
            return NotImplemented
        return self.id == other.id  # アイデンティティによる等値性

    def __hash__(self) -> int:
        return hash(self.id)

完全なパターンについては Read("${CLAUDE_SKILL_DIR}/references/entities-value-objects.md") を参照してください。

値オブジェクト(イミュータブル)

from dataclasses import dataclass
from decimal import Decimal

@dataclass(frozen=True)  # 必ずfrozen=True!
class Money:
    """Value Object: 属性によって定義され、アイデンティティではない。"""
    amount: Decimal
    currency: str

    def __add__(self, other: "Money") -> "Money":
        if self.currency != other.currency:
            raise ValueError("Cannot add different currencies")
        return Money(self.amount + other.amount, self.currency)

Address、DateRangeの例については Read("${CLAUDE_SKILL_DIR}/references/entities-value-objects.md") を参照してください。

重要な判断

判断推奨事項
エンティティ vs 値オブジェクト一意なID + ライフサイクルがある? エンティティ。それ以外は値オブジェクト
エンティティの等値性IDで比較、属性では比較しない
値オブジェクトの可変性常にイミュータブル(frozen=True
リポジトリのスコープアグリゲートルートごとに1つ
ドメインイベントエンティティで収集、永続化後に発行
コンテキスト境界技術的ではなく、ビジネス機能によって分ける

ルールクイックリファレンス

ルール影響カバー範囲
aggregate-boundaries (${CLAUDE_SKILL_DIR}/rules/aggregate-boundaries.md を参照)アグリゲートルート設計、IDによる参照、トランザクションごとに1つ
aggregate-invariants (${CLAUDE_SKILL_DIR}/rules/aggregate-invariants.md を参照)ビジネスルール強制、スペシフィケーションパターン
aggregate-sizing (${CLAUDE_SKILL_DIR}/rules/aggregate-sizing.md を参照)適切なサイズ設定、分割のタイミング、最終的一貫性

使用してはいけない場合

エンティティが5個未満? DDDは全く使わないでください。儀式のコストが利益より大きいです。

パターンインタビューハッカソンMVP成長期エンタープライズよりシンプルな代替案
アグリゲートオーバーキルオーバーキルオーバーキル選択的適切検証付きの普通のdataclass
境界付けられたコンテキストオーバーキルオーバーキルオーバーキル境界線上適切明確なインポートを持つPythonパッケージ
CQRSオーバーキルオーバーキルオーバーキルオーバーキル正当化されたとき読み取り/書き込みの単一モデル
値オブジェクトオーバーキルオーバーキル境界線上適切必須エンティティの型付きフィールド
ドメインイベントオーバーキルオーバーキルオーバーキル選択的適切サービス間の直接メソッド呼び出し
リポジトリパターンオーバーキルオーバーキル境界線上適切必須サービスレイヤーの直接ORM クエリ

経験則: DDDはコード量が約40%増加します。ドメイン複雑性が本当に要求する場合のみ価値があります(複数オブジェクト間で広がる不変条件を持つ5個以上のエンティティ)。CRUDアプリでDDDを使用することは赤信号です。

アンチパターン(禁止)

# 決してドメインモデルを貧血化させてはいけません(データのみのクラス)
@dataclass
class Order:
    id: UUID
    items: list  # 間違い - ビジネスロジックがない!

# インフラストラクチャをドメインに漏らしてはいけません
class Order:
    def save(self, session: Session):  # 間違い - DBのことを知っている!

# イミュータブルでない値オブジェクトを使用してはいけません
@dataclass  # 間違い - frozen=True がない
class Money:
    amount: Decimal

# リポジトリがORMモデルを返してはいけません
async def get(self, id: UUID) -> OrderModel:  # 間違い - ドメイン型を返す!

関連スキル

  • aggregate-patterns - アグリゲート設計の詳細な掘り下げ
  • ork:distributed-systems - アグリゲート間の調整
  • ork:database-patterns - DDDのためのスキーマ設計

参考資料

Read("${CLAUDE_SKILL_DIR}/references/<file>") で必要に応じて読み込んでください:

ファイル内容
entities-value-objects.mdエンティティと値オブジェクトの完全なパターン
repositories.mdリポジトリパターンの実装
domain-events.mdイベント収集と発行
bounded-contexts.mdコンテキストマッピングとACL

機能の詳細

entities

キーワード: entity、identity、lifecycle、mutable、domain object 解決内容: Pythonでのエンティティのモデル化、アイデンティティ等値性、ビジネスロジックの追加

value-objects

キーワード: value object、immutable、frozen、dataclass、structural equality 解決内容: イミュータブルな値オブジェクトの作成、VOとエンティティの使い分け

domain-services

キーワード: domain service、business logic、cross-aggregate、stateless 解決内容: ドメインサービスの使用時期、複数アグリゲート間のロジック

repositories

キーワード: repository、persistence、collection、IRepository、protocol 解決内容: リポジトリパターンの実装、DB アクセスの抽象化、ORM マッピング

bounded-contexts

キーワード: bounded context、context map、ACL、subdomain、ubiquitous language 解決内容: 境界付けられたコンテキストの定義、ACLとの統合、コンテキスト関係

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
yonatangross
リポジトリ
yonatangross/orchestkit
ライセンス
MIT
最終更新
不明

Source: https://github.com/yonatangross/orchestkit / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: yonatangross · yonatangross/orchestkit · ライセンス: MIT