본문으로 건너뛰기
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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구Stripe
설치 방법 보기

포함된 파일(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

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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의 스킬 모두 보기

이 스킬의 문제 신고