定制 sbooker/domain-events-persistence-doctrine 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

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

sbooker/domain-events-persistence-doctrine

Composer 安装命令:

composer require sbooker/domain-events-persistence-doctrine

包简介

Domain events storage Doctrine implementation

README 文档

README

Read in English

Doctrine Persistence for Domain Events (sbooker/doctrine-domain-events-persistence)

Latest Version Software License PHP Version Total Downloads

Готовая реализация хранилищ для sbooker/domain-events-persistence с использованием Doctrine ORM.

Назначение библиотеки

Эта библиотека предоставляет единый, готовый к использованию Doctrine-репозиторий, который реализует все интерфейсы хранения, определенные в sbooker/domain-events-persistence:

  • ConsumeStorage
  • SearchStorage
  • CleanExpiredStorage
  • IdentityStorage

Использование этой библиотеки избавляет вас от необходимости писать собственную реализацию этих интерфейсов для Doctrine.

Установка

composer require sbooker/domain-events-persistence-doctrine

Зависимости:

  • sbooker/domain-events-persistence
  • doctrine/orm

Использование

Шаг 1: Настройте маппинг для PersistentEvent

Вам необходимо сообщить Doctrine, как сохранять сущность Sbooker\DomainEvents\Persistence\PersistentEvent в базу данных.

Ниже приведен наиболее распространенный сценарий, где position является автоинкрементным первичным ключом.

Пример маппинга (XML):

<!-- config/doctrine/Sbooker.DomainEvents.Persistence.PersistentEvent.orm.xml -->
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping">
    <entity name="Sbooker\DomainEvents\Persistence\PersistentEvent"
            table="event"
            repository-class="Sbooker\DomainEvents\Persistence\Doctrine\PersistentEventDoctrineRepository">

        <!-- `position` как автоинкрементный первичный ключ -->
        <id name="position" type="bigint"> <!-- или integer, если уверены что емкости хватит -->
            <generator strategy="IDENTITY"/>
            <options>
                <option name="unsigned">true</option>
            </options>
        </id>

        <!-- `id` события как уникальный идентификатор (не первичный ключ) -->
        <field name="id" type="uuid" unique="true" />

        <field name="name" type="string" length="255" />
        <field name="occurredAt" type="datetimetz_immutable" />
        <field name="entityId" type="uuid" />
        <field name="payload" type="json">
            <options>
                <option name="jsonb">true</option>
            </options>
        </field>

        <indexes>
            <!-- Индекс для поиска по именам событий (для ConsumeStorage) -->
            <index name="ix_event_name" columns="name"/>
            <!-- Индекс для поиска по ID сущности (для SearchStorage) -->
            <index name="ix_event_entity_id" columns="entity_id"/>
            <!-- Индекс для поиска по времени возникновения события (для CleanExpiredStorage и SearchStorage) -->
            <index name="ix_event_occurred_at" columns="occurred_at"/>
        </indexes>

    </entity>
</doctrine-mapping>

Важно: Укажите repository-class в маппинге, чтобы Doctrine знала, что для этой сущности нужно использовать репозиторий из этой библиотеки.

Шаг 2: Используйте репозиторий в DI-контейнере

Теперь вы можете получить репозиторий из EntityManager и передать его в ConsumerFactory и другие сервисы, которым он нужен.

// bootstrap.php или ваш DI-контейнер

use Doctrine\ORM\EntityManagerInterface;
use Sbooker\DomainEvents\Persistence\ConsumerFactory;

/** @var EntityManagerInterface $entityManager */

// 1. Получаем наш готовый репозиторий из EntityManager
$persistentEventRepository = $entityManager->getRepository(\Sbooker\DomainEvents\Persistence\PersistentEvent::class);

// 2. Передаем его в ConsumerFactory и другие сервисы
$consumerFactory = new ConsumerFactory(
    $persistentEventRepository, // Реализует ConsumeStorage
    // ...
);

$myAuditService = new MyAuditService(
    $persistentEventRepository // Реализует SearchStorage
);

License

See LICENSE file.

sbooker/domain-events-persistence-doctrine 适用场景与选型建议

sbooker/domain-events-persistence-doctrine 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4.47k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 02 月 02 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 sbooker/domain-events-persistence-doctrine 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 sbooker/domain-events-persistence-doctrine 我们能提供哪些服务?
定制开发 / 二次开发

基于 sbooker/domain-events-persistence-doctrine 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 4.47k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 7
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 1
  • 开发语言: PHP

其他信息

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