Artikel ini meneroka model Kes Penggunaan Reka Bentuk Dipacu Domain (DDD) dalam PHP, menunjukkan cara menggunakan antara muka dan kelas khusus domain untuk mengurus kegigihan data. Kami akan memeriksa kelas TaxPersistUseCase, yang menggunakan pengurus kegigihan (TaxManagerInterface) untuk menyimpan entiti jenis Cukai, yang mewakili cukai.
Model ini menekankan prinsip DDD : setiap komponen dipisahkan dengan jelas kepada antara muka, pelaksanaan konkrit dan pengecualian, mengikut amalan terbaik dalam suntikan pergantungan dan pengendalian ralat.
Kelas TaxPersistUseCase mengendalikan logik perniagaan yang dikaitkan dengan meneruskan cukai. Ia dibahagikan kepada beberapa bahagian untuk menjelaskan logik dan struktur pendekatan ini.
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;
Kelas TaxPersistUseCase bergantung pada beberapa antara muka dan pengecualian untuk mengendalikan kegigihan cukai. Berikut ialah pecahan peranan mereka:
TaxPersistRequestInterface dan TaxPersistResponseInterface : Antara muka untuk permintaan dan tindak balas Kes Penggunaan.
Pengecualian: Pelbagai pengecualian, seperti BadRequestException, FormException dan NotFoundException, membantu mengurus ralat khusus konteks.
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;
Antara muka mentakrifkan kontrak yang mesti dipatuhi oleh setiap komponen, menggalakkan penyahgandingan dan kebolehujian.
Antara muka ini menentukan kaedah untuk mengurus cukai, termasuk mendapatkan semula dan kegigihan :
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; } }; } }
Antara muka ini mentakrifkan struktur permintaan yang dijangkakan oleh 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; }
Pengecualian memainkan peranan penting dalam DDD dengan menangkap ralat khusus domain:
Atas ialah kandungan terperinci Melaksanakan Kes Penggunaan DDD dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!