dclouds/ddd
最新稳定版本:v1.0.1
Composer 安装命令:
composer require dclouds/ddd
包简介
Набор базовых объектов в рамках DDD
README 文档
README
Набор базовых объектов для реализации Domain-Driven Design (DDD) паттернов в PHP приложениях. Библиотека предоставляет готовые реализации агрегатов, сущностей, объектов-значений и других строительных блоков для создания качественной доменной модели.
Установка через Composer
composer require dclouds/ddd
Основные компоненты
Агрегаты
Агрегаты представляют основные бизнес-объекты в системе и управляют потоком событий предметной области.
Ключевые особенности:
- Event Sourcing: Фиксация и применение событий для изменения состояния
- Domain Events: События предметной области для внутренней логики
- Integration Events: События для интеграции с внешними системами
- Версионность: Контроль версий агрегатов для консистентности
Создание агрегата:
<?php use Dclouds\Ddd\Aggregate\AbstractAggregateRoot; use Dclouds\Ddd\ValueObjects\Uuid\Uuid; class UserAggregate extends AbstractAggregateRoot { public function __construct( protected(set) Uuid $id, protected(set) Text $name, protected(set) Email $email, ) { // } protected function validate(): void { // Проверка бизнес-правил агрегата } }
Объекты-значения (Value Objects)
Immutable объекты, представляющие концепции предметной области.
Доступные Value Objects:
- UUID - Уникальные идентификаторы с поддержкой временного упорядочивания
- Email - Email адреса с валидацией
- Amount - Денежные суммы с арифметическими операциями
- Text - Текстовые значения с ограничениями по длине
- Integer - Целые числа с диапазонами
- Double - Числа с плавающей точкой
Пример использования UUID:
<?php use Dclouds\Ddd\ValueObjects\Uuid\Uuid; class UserId extends Uuid { protected string $typeName = 'Идентификатор пользователя'; } class UserEmail extends Email { protected string $typeName = 'E-mail пользователя'; } class ProductPrice extends Amount { protected string $typeName = 'Сумма товара'; protected ?int $min = 100; } class ProductName extends Text { protected string $typeName = 'Название товара'; protected ?int $min = 5; protected ?int $max = 255; }
Сущности
Базовый класс для бизнес-сущностей, которые могут изменяться в рамках агрегата.
<?php use Dclouds\Ddd\Entity\AbstractEntity; class OrderItem extends AbstractEntity { protected string $aggregateClass = OrderAggregate::class; public function __construct( protected(set) Uuid $productId, protected(set) Integer $quantity, protected(set) Amount $price, ) { // } // Применение событий только в контексте агрегата public function applyQuantityChanged(QuantityChangedEvent $event): void { $this->quantity = $event->newQuantity; } }
Outbox Pattern
Реализация паттерна Outbox для надежной доставки интеграционных событий.
Ключевые особенности:
- Атомарная запись событий в рамках транзакции
- Статусы обработки событий
- Повторные попытки при ошибках
- Очистка старых успешных событий
<?php use Dclouds\Ddd\Contracts\Outbox\OutboxServiceInterface; class EventDispatcher { public function __construct( private OutboxServiceInterface $outboxService ) { // } public function dispatch(AbstractAggregateRoot $aggregate): void { // Получение интеграционных событий $events = $aggregate->releaseIntegrationEvents(); // Регистрация в Outbox foreach ($events as $event) { $this->outboxService->registerEvent($event); } } }
Пагинация
Удобные инструменты для работы с пагинацией результатов.
<?php use Dclouds\Ddd\Paginators\Paginator; use Dclouds\Ddd\Paginators\PageInfo; // Создание информации о странице $pageInfo = new PageInfo( page: 2, pageSize: 20, totalElements: 1000 ); // Создание пагинатора $paginator = new Paginator($pageInfo); echo "Текущая страница: " . $paginator->pageInfo->page; echo "Всего страниц: " . $paginator->pageInfo->totalPages; echo "Есть следующая страница: " . ($paginator->pageInfo->hasNext ? 'Да' : 'Нет');
Лицензия
Библиотека распространяется под MIT лицензией.
Автор
- Алексей Нечаев - omfg.rus@gmail.com
Эта библиотека создана для упрощения реализации DDD паттернов в PHP приложениях и предоставляет надежную основу для построения качественной доменной модели.
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-09-14