承接 friends-of-ddd/sequence-number-generator-doctrine 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

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

friends-of-ddd/sequence-number-generator-doctrine

最新稳定版本:1.1.0

Composer 安装命令:

composer require friends-of-ddd/sequence-number-generator-doctrine

包简介

Sequence number generator for Doctrine

README 文档

README

A doctrine implementation of friends-of-ddd/sequence-number-generator.

Installation

composer require friends-of-ddd/sequence-number-generator-doctrine

You must create a table in DB which saves sequence values. In case of Symfony you can use either bin/console doctrine:migrations:diff (prefered) or bin/console doctrine:schema:update.

Table with name sequence will be created by default. If you need another name see "Configuration" section.

Configuration

Symfony and default table name:

By default, the sequences will be recorded in the table named sequence.

# config/services.yaml:

services:
  FriendsOfDdd\SequenceNumberGenerator\Infrastructure\Doctrine\DoctrineSequenceNumberGenerator: ~

  FriendsOfDdd\SequenceNumberGenerator\Domain\SequenceNumberGeneratorInterface:
    '@FriendsOfDdd\SequenceNumberGenerator\Infrastructure\Doctrine\DoctrineSequenceNumberGenerator'

  FriendsOfDdd\SequenceNumberGenerator\Infrastructure\Doctrine\SequenceFactory: ~

  FriendsOfDdd\SequenceNumberGenerator\Infrastructure\Doctrine\SequenceFactoryInterface:
    '@FriendsOfDdd\SequenceNumberGenerator\Infrastructure\Doctrine\SequenceFactory'
# config/packages/doctrine.yaml:

doctrine:
  orm:
    mappings:
      FriendsOfDdd\SequenceNumberGenerator\Infrastructure\Doctrine:
        is_bundle: false
        type: attribute
        dir: '%kernel.project_dir%/vendor/friends-of-ddd/sequence-number-generator-doctrine/src'
        prefix: 'FriendsOfDdd\SequenceNumberGenerator\Infrastructure\Doctrine'
        alias: SequenceNumberGeneratorEntity

Usage

Generate an incremented sequence number:


use FriendsOfDdd\SequenceNumberGenerator\Domain\SequenceNumberGeneratorInterface;

class OrderFactory
{
    public function __construct(
        private SequenceNumberGeneratorInterface $sequenceNumberGenerator // inject the service into your class 
    ) {
    }

    public function create(): void
    {
        $newOrderId = $this->sequenceNumberGenerator->generateNext('order_id');

        return new Order(
            id: $newOrderId, 
            ...
        );
    }
}

Testing

In unit tests you can use FriendsOfDdd\SequenceNumberGenerator\Infrastructure\InMemorySequenceNumberGenerator to fake real database usage.


use FriendsOfDdd\SequenceNumberGenerator\Infrastructure\InMemorySequenceNumberGenerator;

class OrderFactoryTest extends \PHPUnit\Framework\TestCase
{
    private OrderFactory $orderFactory;

    protected function setUp(): void
    {
        $this->orderFactory = new OrderFactory(
            sequenceNumberGenerator: new InMemorySequenceNumberGenerator()
        );
    }

    public function testCreateNewOrder(): void 
    {
        // arrange
        $previousOrder = $this->orderFactory->create();

        // act
        $newOrder = $this->orderFactory->create();

        // assert
        self::assertSame($previousOrder->id + 1, $newOrder->id);
    }
}


Supported PHP versions:

  • 8.1.*
  • 8.2.*
  • 8.3.*
  • 8.4.*

Supported Doctrine versions

  • 2.20.0+
  • 3.5.2+
  • 4.0.0+

统计信息

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

GitHub 信息

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

其他信息

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