> 백엔드 개발 > PHP 튜토리얼 > PHP에서 DDD 사용 사례 구현

PHP에서 DDD 사용 사례 구현

Patricia Arquette
풀어 주다: 2024-11-12 22:18:02
원래의
1051명이 탐색했습니다.

Implementing a DDD Use Case in PHP

PHP에서 DDD 사용 사례 구현

이 기사에서는 PHP의 도메인 기반 디자인(DDD) 사용 사례 모델을 살펴보고 인터페이스와 도메인별 클래스를 활용하여 데이터 지속성을 관리하는 방법을 보여줍니다. 지속성 관리자(TaxManagerInterface)를 사용하여 세금을 나타내는 세금 유형 엔터티를 저장하는 TaxPersistUseCase 클래스를 살펴보겠습니다.

이 모델은 DDD 원칙을 강조합니다. 각 구성 요소는 종속성 주입 및 오류 처리의 모범 사례에 따라 인터페이스, 구체적인 구현 및 예외로 명확하게 구분됩니다.

TaxPersistUseCase의 구조

TaxPersistUseCase 클래스는 세금 유지와 관련된 비즈니스 로직을 처리합니다. 이 접근 방식의 논리와 구조를 명확히 하기 위해 여러 섹션으로 나누어져 있습니다.

종속성 선언

namespace Domain\Application\UseCase\Order;

use Domain\Application\Entity\Order\Tax;
use Domain\Application\Gateway\Manager\Order\TaxManagerInterface;
use Domain\Application\UseCase\Order\Exception\NotFoundException;
use Domain\Application\UseCase\Order\Interfaces\TaxPersistRequestInterface;
use Domain\Application\UseCase\Order\Interfaces\TaxPersistResponseInterface;
use Domain\Exception\BadRequestException;
use Domain\Exception\FormException;
use Small\CleanApplication\Contract\UseCaseInterface;
use Small\Collection\Collection\StringCollection;
use Small\SwooleEntityManager\EntityManager\Exception\EmptyResultException;
로그인 후 복사
로그인 후 복사

TaxPersistUseCase 클래스는 세금 지속성을 처리하기 위해 여러 인터페이스와 예외에 의존합니다. 역할은 다음과 같습니다.

TaxManagerInterface : 세금 지속성 관리자를 위한 인터페이스입니다.

TaxPersistRequestInterface 및 TaxPersistResponseInterface: 사용 사례의 요청 및 응답을 위한 인터페이스
예외: BadRequestException, FormException 및 NotFoundException과 같은 다양한 예외는 상황별 오류를 관리하는 데 도움이 됩니다.

TaxPersistUseCase 클래스 구현

namespace Domain\Application\UseCase\Order;

use Domain\Application\Entity\Order\Tax;
use Domain\Application\Gateway\Manager\Order\TaxManagerInterface;
use Domain\Application\UseCase\Order\Exception\NotFoundException;
use Domain\Application\UseCase\Order\Interfaces\TaxPersistRequestInterface;
use Domain\Application\UseCase\Order\Interfaces\TaxPersistResponseInterface;
use Domain\Exception\BadRequestException;
use Domain\Exception\FormException;
use Small\CleanApplication\Contract\UseCaseInterface;
use Small\Collection\Collection\StringCollection;
use Small\SwooleEntityManager\EntityManager\Exception\EmptyResultException;
로그인 후 복사
로그인 후 복사
  • 생성자 및 종속성 주입: 생성자는 TaxManagerInterface의 인스턴스를 주입하여 TaxPersistUseCase를 특정 구현에 결합하지 않고 Tax 개체의 지속성을 이 인스턴스에 위임합니다.
  • 요청 유형 확인: 실행 메소드는 $request 객체가 TaxPersistRequestInterface를 구현하는지 확인합니다. 이렇게 하면 수신된 요청이 예상 계약을 준수하는지 확인하여 인터페이스 수준 유효성 검사를 제공합니다.
  • 세금 객체 유지: 요청이 유효한 경우 유스 케이스는 getTax()를 통해 $request에서 세금 객체를 추출하고 TaxManagerInterface에서 applicationPersist 메소드를 호출합니다. 이 지속성 프로세스는 잠재적인 예외를 처리하기 위해 try-catch 블록 내에 캡슐화됩니다
  • EmptyResultException: 세금 엔터티를 찾을 수 없는 경우 이 예외가 포착되고 NotFoundException이 발생하여 오류를 알립니다.
  • FormException: 양식 유효성 검사가 실패하면 FormException이 캡처되고 오류 메시지가 StringCollection에 저장됩니다.
  • 익명 클래스를 통한 동적 응답: 익명 클래스는 TaxPersistResponseInterface를 구현하여 사용 사례의 응답을 반환합니다. 여기에는 getTax() 및 getMessages() 메소드가 포함되어 있으며 각각 Tax 엔터티 및 오류 메시지에 액세스할 수 있습니다.

사용 사례 인터페이스

인터페이스는 각 구성 요소가 준수해야 하는 계약을 정의하여 분리 및 테스트 가능성을 촉진합니다.

세금 관리자 인터페이스

이 인터페이스는 검색 및 지속성을 포함한 세금 관리 방법을 지정합니다.

class TaxPersistUseCase implements UseCaseInterface
{

    public function __construct(
        protected TaxManagerInterface $taxManager,
    ) {}

    public function execute(mixed $request): TaxPersistResponseInterface
    {

        if (!$request instanceof TaxPersistRequestInterface) {
            throw new BadRequestException(
                self::class . ' accepts only request instance of ' . TaxPersistRequestInterface::class
            );
        }

        $tax = $request->getTax();
        $messages = new StringCollection();

        try {
            $this->taxManager->applicationPersist($tax);
        } catch (EmptyResultException $e) {
            throw new NotFoundException($e->getMessage());
        } catch (FormException $e) {
            $messages = $e->getFormMessages();
        }

        return new class($tax, $messages) implements TaxPersistResponseInterface
        {
            public function __construct(
                protected readonly Tax $tax,
                protected readonly StringCollection $messages,
            ) {}

            public function getTax(): Tax
            {
                return $this->tax;
            }

            public function getMessages(): StringCollection
            {
                return $this->messages;
            }
        };

    }

}
로그인 후 복사
  • findById() 및 findByName(): 이 메소드를 사용하면 ID 또는 이름으로 세금을 검색할 수 있습니다.
  • applicationPersist(): 이 메소드는 세금 주체의 지속성을 보장합니다.

TaxPersistRequest인터페이스

이 인터페이스는 TaxPersistUseCase에서 예상하는 요청 구조를 정의합니다.

interface TaxManagerInterface
{
    public function findById(int $id): Tax;
    public function findByName(string $name): Tax;
    public function applicationPersist(Tax $tax): self;
}
로그인 후 복사
  • getTax(): 이 메소드는 지속될 세금 엔터티를 반환하여 사용 사례가 관련 도메인 객체에 직접 액세스할 수 있도록 합니다. TaxPersistResponse인터페이스
  • 응답 인터페이스는 TaxPersistUseCase가 규정을 준수하는 응답을 반환하도록 보장합니다.
interface TaxPersistRequestInterface extends RequestInterface
{
    public function getTax(): Tax;
}
로그인 후 복사
  • getTax(): 지속된 세금 엔터티를 반환하거나 오류가 발생한 경우 null을 반환합니다.
  • getMessages(): 양식 오류가 발생한 경우 오류 메시지가 포함된 StringCollection을 반환합니다.

오류 및 예외 처리

예외는 도메인별 오류를 캡처하여 DDD에서 중요한 역할을 합니다.

  • BadRequestException: 사용 사례가 잘못된 유형의 요청을 받은 경우 발생합니다.
  • NotFoundException: 찾고 있는 세금 법인을 찾을 수 없는 경우 발생합니다.
  • FormException: 유효성 검사 오류를 처리하기 위해 발견되었으며 StringCollection에 오류 메시지가 반환되었습니다.

위 내용은 PHP에서 DDD 사용 사례 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿