亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

Laravel開(kāi)發(fā):如何使用Laravel Event Sourcing構(gòu)建事件驅(qū)動(dòng)的應(yīng)用程序?

事件驅(qū)動(dòng)的應(yīng)用程序是一種利用事件和事件處理器(Event Handler)來(lái)實(shí)現(xiàn)的應(yīng)用程序。事件驅(qū)動(dòng)的架構(gòu)使得應(yīng)用程序更加容易擴(kuò)展和維護(hù),并且更加靈活,在面對(duì)變化時(shí)更加容易適應(yīng)。

Laravel是一種流行的PHP框架,它提供了一種叫做Event Sourcing的功能,可以幫助我們構(gòu)建事件驅(qū)動(dòng)的應(yīng)用程序。本文將介紹如何使用Laravel Event Sourcing構(gòu)建一個(gè)簡(jiǎn)單的事件驅(qū)動(dòng)的應(yīng)用程序。

1.什么是Laravel Event Sourcing?

Laravel Event Sourcing是一種事件驅(qū)動(dòng)的建模框架,它是由Laravel提供的一個(gè)套件,用于幫助我們構(gòu)建事件驅(qū)動(dòng)的應(yīng)用程序。它對(duì)事件進(jìn)行存儲(chǔ)和恢復(fù),使我們能夠重現(xiàn)應(yīng)用程序中的狀態(tài),并且能夠回溯到之前的狀態(tài)。

2.為什么使用Laravel Event Sourcing?

使用Laravel Event Sourcing的好處是可以提高應(yīng)用程序的可擴(kuò)展性和可維護(hù)性。當(dāng)我們使用事件驅(qū)動(dòng)的應(yīng)用程序時(shí),更容易理解和修改應(yīng)用程序的不同部分,并且應(yīng)用程序更加健壯。

使用Laravel Event Sourcing,我們可以輕松實(shí)現(xiàn)多種模式,包括CQRS(Command Query Responsibility Segregation)模式和ES(Event Sourcing)模式。

3.如何使用Laravel Event Sourcing構(gòu)建一個(gè)事件驅(qū)動(dòng)的應(yīng)用程序?

在這個(gè)例子中,我們將構(gòu)建一個(gè)簡(jiǎn)單的任務(wù)管理應(yīng)用程序,用戶(hù)可以創(chuàng)建和完成任務(wù)。

步驟一:創(chuàng)建任務(wù)

我們可以通過(guò)創(chuàng)建任務(wù)來(lái)演示如何使用Laravel Event Sourcing。首先,我們需要?jiǎng)?chuàng)建一個(gè)“TaskCreated”事件來(lái)處理創(chuàng)建任務(wù)的行為。

php artisan make:event TaskCreated

登錄后復(fù)制

步驟二:為任務(wù)創(chuàng)建事件處理器

一旦我們創(chuàng)建了一個(gè)事件,我們就需要?jiǎng)?chuàng)建一個(gè)事件處理器來(lái)處理這個(gè)事件。現(xiàn)在我們需要?jiǎng)?chuàng)建一個(gè)事件處理器來(lái)處理“TaskCreated”事件。

php artisan make:listener CreateTaskListener --event=TaskCreated

登錄后復(fù)制

步驟三:將事件和事件處理器綁定在一起

現(xiàn)在我們要將事件和事件處理器綁定在一起。我們可以在Laravel的EventServiceProvider文件中實(shí)現(xiàn)這一點(diǎn)。

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

登錄后復(fù)制

步驟四:使用事件處理器來(lái)處理任務(wù)創(chuàng)建事件

現(xiàn)在我們可以使用我們的事件處理器來(lái)處理任務(wù)創(chuàng)建事件。我們要實(shí)現(xiàn)的第一個(gè)事件處理器是CreateTaskListener,它將實(shí)際創(chuàng)建新任務(wù)。

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

登錄后復(fù)制

步驟五:使用Laravel Event Sourcing來(lái)存儲(chǔ)事件

使用Laravel Event Sourcing可以讓我們存儲(chǔ)和恢復(fù)事件。我們需要在Laravel中使用Event Sourcing庫(kù),比如Broadway庫(kù)。

我們可以使用Laravel的composer.json文件來(lái)添加Broadway庫(kù):

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

登錄后復(fù)制

然后運(yùn)行以下命令安裝Broadway庫(kù):

composer install

登錄后復(fù)制

步驟六:使用Laravel Event Sourcing

現(xiàn)在我們可以使用Laravel Event Sourcing來(lái)存儲(chǔ)事件。

我們需要?jiǎng)?chuàng)建一個(gè)事件存儲(chǔ)器,來(lái)存儲(chǔ)和檢索事件。我們可以在Laravel的app文件夾中創(chuàng)建一個(gè)名為T(mén)askEventStore.php的類(lèi)來(lái)實(shí)現(xiàn)它:

use BroadwayEventStoreEventStore;
use BroadwayEventSourcingEventSourcingRepository;

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

登錄后復(fù)制

我們需要在TaskEventStore類(lèi)的構(gòu)造函數(shù)中創(chuàng)建一個(gè)新的事件存儲(chǔ)庫(kù),并使用Broadway庫(kù)中的EventSourcingRepository來(lái)存儲(chǔ)事件。我們還需要定義一個(gè)聚合根工廠(chǎng)和聚合根存儲(chǔ)庫(kù)來(lái)管理我們的聚合根。

現(xiàn)在我們可以使用TaskEventStore類(lèi)來(lái)存儲(chǔ)事件。我們可以在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()
);

登錄后復(fù)制

這個(gè)代碼段獲取TaskEventStore類(lèi)的實(shí)例,創(chuàng)建一個(gè)事件流,加載聚合根,調(diào)用handle方法并保存未提交的事件。

我們也需要在Laravel的ServiceProvider類(lèi)中綁定TaskEventStore類(lèi):

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

登錄后復(fù)制

步驟七:查找和顯示任務(wù)

現(xiàn)在我們創(chuàng)建了一個(gè)新的任務(wù),我們可以通過(guò)修改我們的查詢(xún)來(lái)向用戶(hù)顯示所有的任務(wù)。

創(chuàng)建一個(gè)名為ShowTasks的命令:

php artisan make:command ShowTasks

登錄后復(fù)制

我們要實(shí)現(xiàn)的第一個(gè)命令處理器是ShowTasks,它將返回所有任務(wù),以便列表顯示。

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

登錄后復(fù)制

步驟八:標(biāo)記任務(wù)為已完成

現(xiàn)在我們要模擬標(biāo)記任務(wù)為已完成的行為。我們可以使用一個(gè)“TaskCompleted”事件來(lái)跟蹤這個(gè)行為。

首先,我們需要?jiǎng)?chuàng)建一個(gè)“TaskCompleted”事件:

php artisan make:event TaskCompleted

登錄后復(fù)制

然后,我們將創(chuàng)建一個(gè)名為CompleteTaskHandler的事件處理器來(lái)處理這個(gè)事件。

php artisan make:listener CompleteTaskHandler --event=TaskCompleted

登錄后復(fù)制

接下來(lái),我們綁定“TaskCompleted”事件和CompleteTaskHandler事件處理器:

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

登錄后復(fù)制

最后,我們要實(shí)現(xiàn)的第二個(gè)事件處理器是CompleteTaskHandler,它將設(shè)置任務(wù)狀態(tài)為已完成。

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

登錄后復(fù)制

至此,我們成功地創(chuàng)建了一個(gè)事件驅(qū)動(dòng)的應(yīng)用程序,用戶(hù)可以創(chuàng)建、完成和顯示任務(wù)列表。

結(jié)論

使用Laravel Event Sourcing可以幫助我們構(gòu)建事件驅(qū)動(dòng)的應(yīng)用程序。事件驅(qū)動(dòng)的應(yīng)用程序具有更高的可擴(kuò)展性和可維護(hù)性,并且更加靈活。通過(guò)Laravel Event Sourcing,我們可以輕松地實(shí)現(xiàn)多種模式,包括CQRS和ES模式,因此我們建議開(kāi)發(fā)人員在構(gòu)建應(yīng)用程序時(shí)使用事件驅(qū)動(dòng)的架構(gòu)。

以上就是Laravel開(kāi)發(fā):如何使用Laravel Event Sourcing構(gòu)建事件驅(qū)動(dòng)的應(yīng)用程序?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注www.xfxf.net其它相關(guān)文章!

分享到:
標(biāo)簽:EventSourcing laravel 事件驅(qū)動(dòng)
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定