Rumah > pembangunan bahagian belakang > tutorial php > Melaksanakan Kes Penggunaan DDD dalam PHP

Melaksanakan Kes Penggunaan DDD dalam PHP

Patricia Arquette
Lepaskan: 2024-11-12 22:18:02
asal
1009 orang telah melayarinya

Implementing a DDD Use Case in PHP

Melaksanakan Kes Penggunaan DDD untuk dalam PHP

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.

Struktur TaxPersistUseCase

Kelas TaxPersistUseCase mengendalikan logik perniagaan yang dikaitkan dengan meneruskan cukai. Ia dibahagikan kepada beberapa bahagian untuk menjelaskan logik dan struktur pendekatan ini.

Pengisytiharan Kebergantungan

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;
Salin selepas log masuk
Salin selepas log masuk

Kelas TaxPersistUseCase bergantung pada beberapa antara muka dan pengecualian untuk mengendalikan kegigihan cukai. Berikut ialah pecahan peranan mereka:

TaxManagerInterface : Antara muka untuk pengurus kegigihan cukai.

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.

Pelaksanaan Kelas 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;
Salin selepas log masuk
Salin selepas log masuk
  • Suntikan Pembina dan Ketergantungan : Pembina menyuntik tika TaxManagerInterface, mewakilkan kegigihan objek Cukai kepada tika ini tanpa menggabungkan TaxPersistUseCase kepada pelaksanaan tertentu.
  • Pemeriksaan Jenis Permintaan: Kaedah laksana mengesahkan bahawa objek $request melaksanakan TaxPersistRequestInterface. Ini memastikan permintaan yang diterima mematuhi kontrak yang dijangkakan, memberikan pengesahan peringkat antara muka.
  • Mengekalkan Objek Cukai : Jika permintaan itu sah, Kes Penggunaan mengeluarkan objek Cukai daripada $request melalui getTax() dan memanggil kaedah applicationPersist pada TaxManagerInterface. Proses kegigihan ini terkandung dalam blok cuba-tangkap untuk mengendalikan kemungkinan pengecualian
  • EmptyResultException: Jika entiti Cukai tidak ditemui, pengecualian ini ditangkap dan NotFoundException dilemparkan untuk menandakan ralat.
  • FormException: Jika pengesahan borang gagal, FormException akan ditangkap dan mesej ralat disimpan dalam StringCollection.
  • Respon Dinamik melalui Kelas Tanpa Nama : Kelas tanpa nama melaksanakan TaxPersistResponseInterface untuk mengembalikan respons Use Case. Ia termasuk kaedah getTax() dan getMessages(), masing-masing membenarkan akses kepada entiti Cukai dan sebarang mesej ralat.

Gunakan Antara Muka Kes

Antara muka mentakrifkan kontrak yang mesti dipatuhi oleh setiap komponen, menggalakkan penyahgandingan dan kebolehujian.

TaxManagerInterface

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;
            }
        };

    }

}
Salin selepas log masuk
  • findById() dan findByName(): Kaedah ini membolehkan mendapatkan semula cukai melalui ID atau nama.
  • applicationPersist(): Kaedah ini memastikan kegigihan entiti Cukai.

TaxPersistRequestInterface

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;
}
Salin selepas log masuk
  • getTax() : Kaedah ini mengembalikan entiti Cukai untuk diteruskan, membenarkan Use Case mengakses terus objek domain yang berkaitan. TaxPersistResponseInterface
  • Antara muka respons memastikan TaxPersistUseCase mengembalikan respons yang mematuhi:
interface TaxPersistRequestInterface extends RequestInterface
{
    public function getTax(): Tax;
}
Salin selepas log masuk
  • getTax(): Mengembalikan entiti Cukai yang berterusan atau batal jika ralat berlaku.
  • getMessages(): Mengembalikan StringCollection yang mengandungi mesej ralat, jika ralat borang berlaku.

Pengendalian Ralat dan Pengecualian

Pengecualian memainkan peranan penting dalam DDD dengan menangkap ralat khusus domain:

  • BadRequestException: Dibuang jika Use Case menerima permintaan daripada jenis yang salah.
  • NotFoundException: Dibuang apabila entiti Cukai yang dicari tidak ditemui.
  • FormException: Ditangkap untuk mengendalikan ralat pengesahan, dengan mesej ralat dikembalikan dalam StringCollection.

Atas ialah kandungan terperinci Melaksanakan Kes Penggunaan DDD dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan