Rumah >rangka kerja php >Laravel >Pembangunan Laravel: Bagaimana untuk membina aplikasi dipacu acara menggunakan Penyumberan Acara Laravel?

Pembangunan Laravel: Bagaimana untuk membina aplikasi dipacu acara menggunakan Penyumberan Acara Laravel?

王林
王林asal
2023-06-13 12:06:501059semak imbas

Pembangunan Laravel: Bagaimana untuk membina aplikasi dipacu acara menggunakan Penyumberan Acara Laravel?

Aplikasi dipacu acara ialah aplikasi yang dilaksanakan menggunakan acara dan pengendali acara (Pengendali Acara). Seni bina dipacu peristiwa menjadikan aplikasi lebih mudah untuk dikembangkan dan diselenggara, lebih fleksibel dan lebih mudah untuk menyesuaikan diri dengan perubahan.

Laravel ialah rangka kerja PHP popular yang menyediakan ciri yang dipanggil Penyumberan Acara yang boleh membantu kami membina aplikasi dipacu acara. Artikel ini akan memperkenalkan cara menggunakan Penyumberan Acara Laravel untuk membina aplikasi terdorong acara yang mudah.

1. Apakah Penyumberan Acara Laravel?

Penyumberan Acara Laravel ialah rangka kerja pemodelan dipacu peristiwa, yang merupakan suite yang disediakan oleh Laravel untuk membantu kami membina aplikasi dipacu acara. Ia menyimpan dan memulihkan peristiwa, membolehkan kami mengeluarkan semula keadaan dalam aplikasi dan kembali ke keadaan sebelumnya.

2. Mengapa menggunakan Sumber Acara Laravel?

Faedah menggunakan Penyumberan Acara Laravel ialah ia dapat meningkatkan kebolehskalaan dan kebolehselenggaraan aplikasi. Apabila kami menggunakan aplikasi dipacu peristiwa, lebih mudah untuk memahami dan mengubah suai bahagian aplikasi yang berbeza, dan aplikasi itu lebih mantap.

Menggunakan Penyumberan Acara Laravel, kami boleh melaksanakan berbilang mod dengan mudah, termasuk mod CQRS (Pengasingan Tanggungjawab Pertanyaan Perintah) dan mod ES (Penyumberan Acara).

3. Bagaimanakah cara menggunakan Penyumberan Acara Laravel untuk membina aplikasi dipacu acara?

Dalam contoh ini, kami akan membina aplikasi pengurusan tugasan mudah di mana pengguna boleh membuat dan menyelesaikan tugasan.

Langkah 1: Buat tugasan

Kami boleh menunjukkan cara menggunakan Penyumberan Acara Laravel dengan mencipta tugasan. Pertama, kita perlu mencipta acara "TaskCreated" untuk mengendalikan tingkah laku mencipta tugas.

php artisan make:event TaskCreated

Langkah 2: Buat pengendali acara untuk tugasan

Setelah kami mencipta acara, kami perlu mencipta pengendali acara untuk mengendalikan acara. Sekarang kita perlu mencipta pengendali acara untuk mengendalikan acara "TaskCreated".

php artisan make:listener CreateTaskListener --event=TaskCreated

Langkah 3: Ikat acara dan pengendali acara bersama-sama

Sekarang kita perlu mengikat acara dan pengendali acara bersama-sama. Kita boleh mencapai ini dalam fail EventServiceProvider Laravel.

protected $listen = [
    TaskCreated::class => [
        CreateTaskListener::class,
    ],
];

Langkah 4: Gunakan pengendali acara untuk mengendalikan acara penciptaan tugasan

Kini kami boleh menggunakan pengendali acara kami untuk mengendalikan acara penciptaan tugas. Pengendali acara pertama yang akan kami laksanakan ialah CreateTaskListener, yang sebenarnya akan mencipta tugas baharu.

public function handle(TaskCreated $event)
{
    $task = new Task;
    $task->name = $event->name;
    $task->save();
}

Langkah 5: Gunakan Penyumberan Acara Laravel untuk menyimpan acara

Penggunaan Penyumberan Acara Laravel membolehkan kami menyimpan dan memulihkan acara. Kita perlu menggunakan perpustakaan Penyumberan Acara dalam Laravel, seperti perpustakaan Broadway.

Kita boleh menggunakan fail composer.json Laravel untuk menambah perpustakaan Broadway:

"require": {
    "broadway/broadway": "^1.0",
    "broadway/serializer": "^1.0",
    "broadway/event-store": "^1.0"
}

Kemudian jalankan arahan berikut untuk memasang perpustakaan Broadway:

composer install

Langkah 6: Gunakan Laravel Penyumberan Acara

Kini kita boleh menggunakan Penyumberan Acara Laravel untuk menyimpan acara.

Kami perlu membuat kedai acara untuk menyimpan dan mendapatkan semula acara. Kita boleh melaksanakannya dengan mencipta kelas yang dipanggil TaskEventStore.php dalam folder aplikasi Laravel:

use BroadwayEventStoreEventStore;
use BroadwayEventSourcingEventSourcingRepository;

class TaskEventStore extends EventSourcingRepository
{
    public function __construct(EventStore $eventStore)
    {
        parent::__construct(
            $eventStore,
            new TaskAggregateRootEventSourcedFactory(),
            new TaskAggregateRootEventSourcedRepository()
        );
    }
}

Kita perlu mencipta stor acara baharu dalam pembina kelas TaskEventStore dan menggunakan perpustakaan Broadway EventSourcingRepository dalam EventSourcingRepository untuk menyimpan acara . Kami juga perlu menentukan kilang akar agregat dan repositori akar agregat untuk mengurus akar agregat kami.

Kini kita boleh menggunakan kelas TaskEventStore untuk menyimpan acara. Kita boleh menambah kod berikut dalam pengendali acara CreateTaskListener:

$eventStore = $this->app->make(TaskEventStore::class);
$eventStream = new DomainEventStream([$event]);

$aggregateRoot = $eventStore->load($command->taskId);
$aggregateRoot->handle($event);

$eventStore->save(
    $aggregateRoot->getUncommittedEvents(),
    $aggregateRoot->getId()
);

Coretan kod ini mendapat contoh kelas TaskEventStore, mencipta strim acara, memuatkan punca agregat, memanggil kaedah pemegang dan menyimpan peristiwa yang tidak dikomit.

Kami juga perlu mengikat kelas TaskEventStore dalam kelas ServiceProvider Laravel:

$this->app->singleton(TaskEventStore::class, function ($app) {
    $eventStore = new InMemoryEventStore;
    return new TaskEventStore($eventStore);
});

Langkah 7: Cari dan paparkan tugasan

Sekarang kami telah mencipta tugas baharu, kami Kami boleh mengubah suai pertanyaan kami untuk memaparkan semua tugasan kepada pengguna.

Buat perintah yang dipanggil ShowTasks:

php artisan make:command ShowTasks

Pemproses arahan pertama yang akan kami laksanakan ialah ShowTasks, yang akan mengembalikan semua tugas untuk paparan senarai.

public function handle()
{
    $tasks = Task::all();
    foreach ($tasks as $task) {
        $this->info("Name: {$task->name}");
    }
}

Langkah 8: Tandai tugasan sebagai selesai

Sekarang kami mahu mensimulasikan tingkah laku menandakan tugasan sebagai selesai. Kita boleh menggunakan acara "TaskCompleted" untuk menjejak tingkah laku ini.

Pertama, kita perlu mencipta acara "TaskCompleted":

php artisan make:event TaskCompleted

Kemudian, kita akan mencipta pengendali acara yang dipanggil CompleteTaskHandler untuk mengendalikan acara ini.

php artisan make:listener CompleteTaskHandler --event=TaskCompleted

Seterusnya, kami mengikat acara "TaskCompleted" dan pengendali acara CompleteTaskHandler:

protected $listen = [
    TaskCreated::class => [
        CreateTaskListener::class,
    ],
    TaskCompleted::class => [
        CompleteTaskHandler::class,
    ],
];

Akhir sekali, pengendali acara kedua yang ingin kami laksanakan ialah CompleteTaskHandler, yang akan menetapkan status tugas sebagai selesai.

public function handle(TaskCompleted $event)
{
    $task = Task::where('name', $event->name)->firstOrFail();
    $task->completed = true;
    $task->save();
}

Pada ketika ini, kami telah berjaya mencipta aplikasi dipacu peristiwa yang membolehkan pengguna membuat, melengkapkan dan memaparkan senarai tugasan.

Kesimpulan

Menggunakan Penyumberan Acara Laravel boleh membantu kami membina aplikasi dipacu acara. Aplikasi dipacu acara lebih berskala, boleh diselenggara dan lebih fleksibel. Dengan Penyumberan Acara Laravel, kami boleh melaksanakan berbilang corak dengan mudah, termasuk corak CQRS dan ES, jadi kami mengesyorkan pembangun menggunakan seni bina dipacu peristiwa semasa membina aplikasi.

Atas ialah kandungan terperinci Pembangunan Laravel: Bagaimana untuk membina aplikasi dipacu acara menggunakan Penyumberan Acara Laravel?. 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