sbooker/domain-events-persistence-doctrine
Composer 安装命令:
composer require sbooker/domain-events-persistence-doctrine
包简介
Domain events storage Doctrine implementation
README 文档
README
Doctrine Persistence for Domain Events (sbooker/doctrine-domain-events-persistence)
Готовая реализация хранилищ для sbooker/domain-events-persistence с использованием Doctrine ORM.
Назначение библиотеки
Эта библиотека предоставляет единый, готовый к использованию Doctrine-репозиторий, который реализует все интерфейсы хранения, определенные в sbooker/domain-events-persistence:
ConsumeStorageSearchStorageCleanExpiredStorageIdentityStorage
Использование этой библиотеки избавляет вас от необходимости писать собственную реализацию этих интерфейсов для Doctrine.
Установка
composer require sbooker/domain-events-persistence-doctrine
Зависимости:
sbooker/domain-events-persistencedoctrine/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 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 4.47k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 7
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-02-02