cocoders/event-store 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

cocoders/event-store

Composer 安装命令:

composer require cocoders/event-store

包简介

Event store layer to help us (Cocoders) to implement event sourcing in our projects

README 文档

README

Travis build

Event store layer to help us - Cocoders to implement event sourcing in our projects. It is quite simple (or event stupid) abstraction layer (yunno KISS)

Requirements

PHP >= 7.0

Installation

Package can be installed using composer composer require cocoders/event-store Usage

Library provides bunch of interfaces and about 5 concrete classes for handling domain events.

What you need to do in order to setup this event store with your project? Follow those 5 steps.

  1. Step 1 - define you aggregate In your aggregate you need implement Cocoders\EventStore\AggregateRoot interface (you can use Cocoders\EventStore\AggregateRootBehavior trait if tou want). Example: Example Domain Invoice Aggregate

  2. Step 2 - define own events and use it in aggregate You should define new event classes and use those events in you aggregate

  3. Step 3 - implement own EventStore You need to create concrete implementation of Cocoders\EventStore\EventStore interface, using your favorite db engine ;) Example: Json File EventStore

  4. Step 4 - do some operation on aggregate and add fresh events from Aggregate to event store, and commit event store.

Examples:

    $eventStore = new MyEventStore();
    $invoice = Invoice::issueInvoice(
        Invoice\Id::generate();
        $command->getSeller(),
        $command->getBuyer(),
        $command->maxItemNumber
    );
    $eventStore->apply(new EventStream\Name(Invoice::class), $invoice->getRecordedEvents());
    $eventStore->commit();
  1. Step 5 - define own projections. As you can see in example, invoice aggregate does not have many "getters". You should generate read model using projection instead of using getters. Projection is basically event subscriber which can react to event by chaging read model. To use event subscriber you need to use EventBus:
  $eventStore = new MyEventStore(); 
  $eventSubscribers = new EventSubscribers();
  $eventBus = new EventBus($eventSubscribers);
  $projectionManager = new ProjectionManager($eventSubscribers);
  $projectionManager->registerProjection(
      'InvoiceIssued',
      new MyProjection()
  );
  $newEventsStream = $eventStore->findUncommited(new EventStream\Name(Invoice::class));
  $eventStore->commit();
  $eventStore->notify($newEventsStream); //now event bus will notify projections as well

Development and tests

To develop this lib we are using docker and docker-compose. After installation of those you should run:

    docker-compose up
    docker-compose run eventstore bash

Then on docker console run:

composer install
php bin/phpspec run -fpretty
php bin/phpunit

统计信息

  • 总下载量: 915
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 14
  • 点击次数: 0
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 14
  • Watchers: 3
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2016-02-15

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固