この記事では、PHP のドメイン駆動設計 (DDD) ユースケース モデルを検討し、インターフェイスとドメイン固有のクラスを利用してデータの永続性を管理する方法を示します。 TaxPersistUseCase クラスを調べます。このクラスは永続化マネージャー (TaxManagerInterface) を使用して、税金を表す Tax 型のエンティティを保存します。
このモデルは 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 中国語 Web サイトの他の関連記事を参照してください。