이 기사에서는 PHP의 도메인 기반 디자인(DDD) 사용 사례 모델을 살펴보고 인터페이스와 도메인별 클래스를 활용하여 데이터 지속성을 관리하는 방법을 보여줍니다. 지속성 관리자(TaxManagerInterface)를 사용하여 세금을 나타내는 세금 유형 엔터티를 저장하는 TaxPersistUseCase 클래스를 살펴보겠습니다.
이 모델은 DDD 원칙을 강조합니다. 각 구성 요소는 종속성 주입 및 오류 처리의 모범 사례에 따라 인터페이스, 구체적인 구현 및 예외로 명확하게 구분됩니다.
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 클래스는 세금 지속성을 처리하기 위해 여러 인터페이스와 예외에 의존합니다. 역할은 다음과 같습니다.
TaxPersistRequestInterface 및 TaxPersistResponseInterface: 사용 사례의 요청 및 응답을 위한 인터페이스
예외: BadRequestException, FormException 및 NotFoundException과 같은 다양한 예외는 상황별 오류를 관리하는 데 도움이 됩니다.
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;
인터페이스는 각 구성 요소가 준수해야 하는 계약을 정의하여 분리 및 테스트 가능성을 촉진합니다.
이 인터페이스는 검색 및 지속성을 포함한 세금 관리 방법을 지정합니다.
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; } }; } }
이 인터페이스는 TaxPersistUseCase에서 예상하는 요청 구조를 정의합니다.
interface TaxManagerInterface { public function findById(int $id): Tax; public function findByName(string $name): Tax; public function applicationPersist(Tax $tax): self; }
interface TaxPersistRequestInterface extends RequestInterface { public function getTax(): Tax; }
예외는 도메인별 오류를 캡처하여 DDD에서 중요한 역할을 합니다.
위 내용은 PHP에서 DDD 사용 사례 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!