cari
Rumahpembangunan bahagian belakangPHP8Bagaimana cara menggunakan CQRS (Pemisahan Tanggungjawab Pertanyaan Perintah) dalam Php 8?

Cara menggunakan CQRS (Pemisahan Tanggungjawab Pertanyaan Perintah) dalam Php 8? Pemisahan ini membawa kepada seni bina yang lebih diselenggara dan berskala. Berikut adalah pecahan bagaimana untuk melakukannya:

1. Tentukan Perintah dan Pertanyaan:

Perintah mewakili tindakan yang mengubah keadaan permohonan. Mereka harus mudah, operasi atom. Pertanyaan, sebaliknya, adalah operasi baca sahaja yang mengambil data. Dalam PHP, anda boleh mewakili ini menggunakan kelas:

// Command
class CreateUserCommand
{
    public function __construct(public string $name, public string $email) {}
}

// Query
class GetUserQuery
{
    public function __construct(public int $userId) {}
}
2. Buat pengendali arahan dan pengendali pertanyaan:

Ini bertanggungjawab untuk memproses arahan dan pertanyaan, masing -masing. Pengendali perintah biasanya berinteraksi dengan lapisan kegigihan (mis., Pangkalan data) untuk mengemas kini data. Pengendali pertanyaan mengambil data dari lapisan kegigihan atau sumber lain.

// Command Handler
class CreateUserCommandHandler
{
    public function __construct(private PDO $pdo) {}

    public function handle(CreateUserCommand $command): void
    {
        $stmt = $this->pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
        $stmt->execute([$command->name, $command->email]);
    }
}

// Query Handler
class GetUserQueryHandler
{
    public function __construct(private PDO $pdo) {}

    public function handle(GetUserQuery $query): ?array
    {
        $stmt = $this->pdo->prepare("SELECT * FROM users WHERE id = ?");
        $stmt->execute([$query->userId]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
}
3. Gunakan bas perintah dan bas pertanyaan:

Akta ini sebagai titik pusat untuk menghantar arahan dan pertanyaan kepada pengendali masing -masing. Anda boleh melaksanakannya menggunakan antara muka mudah dan suntikan ketergantungan:

4. Melaksanakan Penyumberan Acara (Pilihan):
interface CommandBus
{
    public function handle(object $command): void;
}

class SimpleCommandBus implements CommandBus
{
    private array $handlers;

    public function __construct(array $handlers) {
        $this->handlers = $handlers;
    }

    public function handle(object $command): void
    {
        $handlerClass = get_class($command) . 'Handler';
        if (isset($this->handlers[$handlerClass])) {
            $handler = $this->handlers[$handlerClass];
            $handler->handle($command);
        } else {
            throw new \Exception("Handler not found for command: " . get_class($command));
        }
    }
}
//Similar implementation for QueryBus
Untuk peningkatan fleksibiliti dan kebolehlaksanaan, pertimbangkan untuk menggunakan penyumberan acara. Daripada mengemas kini pangkalan data secara langsung, arahan menjana peristiwa yang disimpan. Pertanyaan kemudian membina semula keadaan semasa dari aliran acara.
  • Pastikan arahan dan pertanyaan mudah dan atom: Elakkan logik kompleks dalam pengendali. Memecahkan operasi besar ke dalam unit yang lebih kecil, bebas. Pangkalan data yang dioptimumkan membaca (seperti Redis atau Cassandra) boleh mengendalikan jumlah pertanyaan yang tinggi dengan lebih cekap. Ini menghalang operasi jangka panjang daripada menyekat benang aplikasi utama. Sourcing untuk domain kompleks:
  • Jika domain anda memerlukan tahap kebolehlaksanaan atau fleksibiliti yang tinggi, sumber peristiwa dapat bermanfaat. Dengan memisahkan operasi membaca dan menulis, anda boleh:
  • Mengoptimumkan pangkalan data untuk tugas -tugas tertentu:
  • Gunakan teknologi pangkalan data yang berbeza yang dioptimumkan untuk membaca dan menulis. Skala: Anda boleh dengan mudah membaca dan menulis operasi secara bebas. Berikut adalah beberapa perangkap biasa untuk mengelakkan:
    • over-engineering: Jangan memohon CQRS untuk aplikasi mudah di mana ia tidak diperlukan. Kerumitan tambahan mungkin melebihi manfaat. Ini mungkin memerlukan pengendalian yang berhati -hati terhadap konsistensi yang akhirnya. Ujian: Ujian menyeluruh adalah penting untuk memastikan integriti data dan fungsi yang betul. Pertimbangkan untuk menggunakan ujian unit, ujian integrasi, dan ujian akhir-ke-akhir. Ini corak yang kuat tetapi harus digunakan dengan bijak.

Atas ialah kandungan terperinci Bagaimana cara menggunakan CQRS (Pemisahan Tanggungjawab Pertanyaan Perintah) dalam Php 8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular