Maison >développement back-end >tutoriel php >Implémentation d'un cas d'utilisation DDD en PHP
Cet article explore un modèle de cas d'utilisation de conception pilotée par domaine (DDD) en PHP, démontrant comment utiliser des interfaces et des classes spécifiques à un domaine pour gérer la persistance des données. Nous examinerons la classe TaxPersistUseCase, qui utilise un gestionnaire de persistance (TaxManagerInterface) pour enregistrer une entité de type Tax, représentant une taxe.
Ce modèle met l'accent sur les principes DDD : chaque composant est clairement séparé en interfaces, implémentations concrètes et exceptions, suivant les meilleures pratiques en matière d'injection de dépendances et de gestion des erreurs.
La classe TaxPersistUseCase gère la logique métier associée à la persistance d'une taxe. Il est divisé en plusieurs sections pour clarifier la logique et la structure de cette approche.
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;
La classe TaxPersistUseCase dépend de plusieurs interfaces et exceptions pour gérer la persistance fiscale. Voici une répartition de leurs rôles :
TaxPersistRequestInterface et TaxPersistResponseInterface : Interfaces pour la demande et la réponse du cas d'utilisation.
Exceptions : diverses exceptions, telles que BadRequestException, FormException et NotFoundException, aident à gérer les erreurs spécifiques au contexte.
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;
Les interfaces définissent les contrats que chaque composant doit respecter, favorisant le découplage et la testabilité.
Cette interface précise les modalités de gestion des taxes, notamment la récupération et la persistance :
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; } }; } }
Cette interface définit la structure de la requête attendue par 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; }
Les exceptions jouent un rôle important dans DDD en capturant les erreurs spécifiques au domaine :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!