本文へ移動
cccskills
無料GitHub で公開

acc-create-anti-corruption-layer

Generates DDD Anti-Corruption Layer for PHP 8.5. Creates translation layer between bounded contexts or external systems. Includes adapters, translators, facades, and unit tests.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md6.7 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Anti-Corruption Layer Generator

Generate DDD-compliant Anti-Corruption Layer (ACL) components for isolating bounded contexts and integrating with external/legacy systems.

When to Use

ScenarioExample
Legacy system integrationERP, CRM, mainframe
Third-party API integrationPayment gateway, shipping API
Bounded context communicationOrder ↔ Inventory contexts
Database migrationOld schema → new domain model
Microservice integrationExternal service with different model

Anti-Corruption Layer Characteristics

  • Isolation: Protects domain model from external/foreign concepts
  • Translation: Converts between domain and external models
  • Facade: Provides simplified interface to external systems
  • Adapter: Implements domain ports using external services
  • No Domain Leakage: External concepts never enter domain layer
  • Bidirectional: Can translate both inbound and outbound

ACL Architecture

YOUR BOUNDED CONTEXT
├── DOMAIN LAYER
│   └── Port (Interface) ←────────────┐
│                                      │
├── ANTI-CORRUPTION LAYER             │
│   ├── Adapter (implements Port) ────┘
│   ├── Translator (Domain ↔ External)
│   ├── Facade (External system wrapper)
│   └── External DTOs
│
└── EXTERNAL SYSTEM (Legacy, API, other bounded context)

Generation Process

Step 1: Generate Domain Port

Path: src/Domain/{BoundedContext}/Port/

  1. {ExternalSystem}PortInterface.php — Domain interface for external system

Step 2: Generate External DTOs

Path: src/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/DTO/

  1. {ExternalSystem}{Concept}DTO.php — DTOs matching external format

Step 3: Generate Translator

Path: src/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/

  1. {ExternalSystem}Translator.php — Domain ↔ External conversion

Step 4: Generate Facade

Path: src/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/

  1. {ExternalSystem}Facade.php — Simplified external system interface

Step 5: Generate Adapter

Path: src/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/

  1. {ExternalSystem}Adapter.php — Implements domain port

Step 6: Generate Exceptions

Path: src/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/Exception/

  1. {ExternalSystem}Exception.php — Domain exception
  2. {ExternalSystem}ConnectionException.php — Infrastructure exception

Step 7: Generate Tests

  1. {ExternalSystem}TranslatorTest.php — Translation tests
  2. {ExternalSystem}AdapterTest.php — Adapter integration tests

File Placement

ComponentPath
Domain Portsrc/Domain/{BoundedContext}/Port/{ExternalSystem}PortInterface.php
External DTOsrc/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/DTO/
Translatorsrc/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/{ExternalSystem}Translator.php
Facadesrc/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/{ExternalSystem}Facade.php
Adaptersrc/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/{ExternalSystem}Adapter.php
Exceptionssrc/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/Exception/
Teststests/Unit/Infrastructure/{BoundedContext}/ACL/{ExternalSystem}/

Naming Conventions

ComponentPatternExample
Port{ExternalSystem}PortInterfacePaymentGatewayPortInterface
DTO{ExternalSystem}{Concept}DTOStripeChargeDTO
Translator{ExternalSystem}TranslatorStripeTranslator
Facade{ExternalSystem}FacadeStripeFacade
Adapter{ExternalSystem}AdapterStripeAdapter
Exception{ExternalSystem}ExceptionStripeException

Quick Template Reference

Domain Port

interface {ExternalSystem}PortInterface
{
    public function {operation}({DomainParameters}): {DomainReturnType};
}

Translator

final readonly class {ExternalSystem}Translator
{
    public function toDomain({ExternalSystem}DTO $dto): {Entity};
    public function toExternal({Entity} $entity): {ExternalSystem}DTO;
}

Adapter

final readonly class {ExternalSystem}Adapter implements {ExternalSystem}PortInterface
{
    public function __construct(
        private {ExternalSystem}Facade $facade,
        private {ExternalSystem}Translator $translator,
    ) {}

    public function {operation}({DomainParameters}): {DomainReturnType}
    {
        $dto = $this->translator->toExternal($entity);
        $result = $this->facade->{externalOperation}($dto);
        return $this->translator->toDomain($result);
    }
}

Usage Example

// Domain port interface
interface PaymentGatewayPortInterface
{
    public function charge(Payment $payment): PaymentId;
    public function refund(PaymentId $paymentId, Money $amount): void;
}

// Adapter implementation
final readonly class StripeAdapter implements PaymentGatewayPortInterface
{
    public function charge(Payment $payment): PaymentId
    {
        $stripeCharge = $this->translator->toStripeCharge($payment);
        $result = $this->facade->createCharge($stripeCharge);
        return $this->translator->toPaymentId($result);
    }
}

Anti-patterns to Avoid

Anti-patternProblemSolution
Domain using external DTOsExternal concepts leak into domainAlways translate at ACL boundary
Translator in domain layerInfrastructure concern in domainKeep translator in infrastructure
Exposing external exceptionsCoupling to external systemWrap in domain exceptions
Direct API calls from domainNo isolationUse port/adapter pattern
Shared DTOs across ACLsCoupling between integrationsEach ACL has own DTOs
Business logic in translatorWrong responsibilityTranslator only maps data

DI Configuration

# services.yaml
Domain\Payment\Port\PaymentGatewayPortInterface:
    alias: Infrastructure\Payment\ACL\Stripe\StripeAdapter

Infrastructure\Payment\ACL\Stripe\StripeFacade:
    arguments:
        $client: '@stripe.client'

References

For complete PHP templates and examples, see:

  • references/templates.md — Domain Port, External DTO, Translator, Facade, Adapter, Exception templates
  • references/examples.md — Stripe Payment Gateway ACL complete example and tests

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Master backend architectures, REST API design, microservices, and server-side development across multiple languages. Use this as a central index to access specialized sub-skills.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

在每次回复中使用固定前缀并列出本次实际参考的指令/文件,便于校验是否遵循上下文与规则。

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

Automate 21risk tasks via Rube MCP (Composio). Always search tools first for current schemas.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

Automate 2chat tasks via Rube MCP (Composio). Always search tools first for current schemas.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

Arquitecto de Soluciones Principal y Consultor Tecnológico de Andru.ia. Diagnostica y traza la hoja de ruta óptima para proyectos de IA en español.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

[00] META. Orchestrate skills into dynamic chains for complex tasks. Analyzes the task, discovers available skills, builds an optimal chain, explains why each skill is needed, and executes step-by-step with user confirmation. Use for any complex task requiring multiple thinking/research/analysis steps. Triggers on "plan this", "how to approach", "what's the strategy", "build a plan", or any multi-step problem requiring skill orchestration.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

MikeCheng1208 のスキルをすべて見る

このスキルの問題を報告する