スキル一覧に戻る
Dev-Int

add-bc-contract

by Dev-Int

Tests for help and skill :wink:

0🍴 0📅 2026年1月16日
GitHubで見るManusで実行

SKILL.md


name: add-bc-contract description: Add Contract for inter-BC communication using Provider pattern. Use when one Bounded Context needs to access data from another BC (e.g., Inventory needs Articles from Admin). Creates Contract interface, Provider implementation, and configuration.

Add BC Contract

Create Contract for inter-BC communication using Provider pattern.


When to Use

  • BC needs to read data from another BC
  • Creating select options from another BC (TwigComponent)
  • Exposing domain data to other contexts

Inputs/Outputs

InputExampleOutput
provider_bcAdminProviderBC/Contracts/ContractName.php
consumer_bcInventoryProviderBC/Adapters/Contracts/ProviderBCContractName.php
contract_nameArticleProviderProviderBC/Frameworks/config/services.yaml (updated)
methods['provide', 'provideAll']ConsumerBC/Frameworks/deptrac.yaml (updated)

Process

StepFileAction
ContractProviderBC/Contracts/ContractName.phpInterface with methods (template: contract.php.tpl)
ProviderProviderBC/Adapters/Contracts/ProviderBCContractName.phpImplementation with Finder (template: provider.php.tpl)
ConfigProviderBC/Frameworks/config/services.yamlAutowire Contract → Provider
DeptracConsumerBC/Frameworks/deptrac.yamlAllow ProviderBC\Contracts
Validate-make cs-fixer && make stan && bin/deptrac analyse && make qa

Structures

Contract (interface in ProviderBC/Contracts/):

interface ContractName {
    public function provide(string $uuid): EntityData; // throws
    public function provideAll(?array $ids = null): iterable;
}

Provider (readonly, uses Finder):

final readonly class ProviderBCContractName implements ContractName {
    public function __construct(private EntityFinder $finder) {} // Finder, NOT Repository

    public function provide(string $uuid): EntityData {
        $entity = $this->finder->find($uuid) ?? throw EntityNotFound::fromUuid($uuid);
        return $this->toData($entity);
    }

    public function provideAll(?array $ids = null): iterable {
        $entities = $ids ? $this->finder->findByUuids($ids) : $this->finder->findAll();
        foreach ($entities as $entity) {
            yield $this->toData($entity);
        }
    }

    private function toData(Entity $entity): EntityData { /* convert to DTO */ }
}

Config (ProviderBC/Frameworks/config/services.yaml):

ProviderBC\Contracts\ContractName:
    class: ProviderBC\Adapters\Contracts\ProviderBCContractName

Deptrac (ConsumerBC/Frameworks/deptrac.yaml):

ConsumerBC\Adapters:
    - ProviderBC\Contracts  # ONLY Contracts, NOT Entities/UseCases

See: docs/GLOSSARY.md#contract, #provider, #data-dto


Rules

CRITICAL:

  • Provider uses Finder (NOT Repository) - providers are read-only
  • Consumer depends ONLY on Contract interface (never Provider implementation)
  • Deptrac allows ONLY Contracts namespace (not Entities/UseCases)

Locations:

  • Contract: ProviderBC/Contracts/
  • Provider: ProviderBC/Adapters/Contracts/
  • Exception: ProviderBC/Contracts/Exception/ if needed
  • DTO: ProviderBC/Contracts/DTO/ if complex data

Naming:

  • Contract: {Entity}Provider (e.g., ArticleProvider)
  • Provider: {BC}{Contract} (e.g., AdminArticleProvider)

Variants

Query Provider (data access):

public function provide(string $uuid): EntityData;
public function provideAll(?array $ids = null): iterable;

TwigComponent Provider (form select):

/** @return array<string, string> [uuid => label] */
public function getAllForChoice(): array;

Templates

  • contract.php.tpl - Contract interface
  • provider.php.tpl - Provider implementation

Location: .claude/templates/


References

  • Contract/Provider pattern: docs/GLOSSARY.md#contract, #provider
  • Inter-BC architecture: docs/architecture.md#inter-bc
  • Detailed guide: docs/guides/bounded-contexts.md

スコア

総合スコア

60/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です