php ddd example
1.0.0
使用域驅動設計 (DDD) 和命令查詢職責分離 (CQRS) 原則的 PHP 應用程式範例,使程式碼盡可能簡單。
看看、玩一下並享受其中的樂趣。歡迎明星
查看示範 · 報告錯誤 · 請求功能
git clone https://github.com/CodelyTV/php-ddd-example php-ddd-example
cd php-ddd-example
cp .env .env.local
)make build
make deps
make test
該計畫試圖成為一個MOOC(大規模開放式線上課程)平台。它與任何框架分離,但它有一些 Symfony 和 Laravel 實作。
此儲存庫遵循六角形架構模式。此外,它是使用modules
構建的。由此,我們可以看到有界上下文的當前結構是:
$ tree - L 4 src
src
|-- Mooc // Company subdomain / Bounded Context: Features related to one of the company business lines / products
| ` -- Videos // Some Module inside the Mooc context
| |-- Application
| | |-- Create // Inside the application layer all is structured by actions
| | | |-- CreateVideoCommand .php
| | | |-- CreateVideoCommandHandler .php
| | | ` -- VideoCreator .php
| | |-- Find
| | |-- Trim
| | ` -- Update
| |-- Domain
| | |-- Video .php // The Aggregate of the Module
| | |-- VideoCreatedDomainEvent .php // A Domain Event
| | |-- VideoFinder .php
| | |-- VideoId .php
| | |-- VideoNotFound .php
| | |-- VideoRepository .php // The `Interface` of the repository is inside Domain
| | |-- VideoTitle .php
| | |-- VideoType .php
| | |-- VideoUrl .php
| | ` -- Videos .php // A collection of our Aggregate
| ` -- Infrastructure // The infrastructure of our module
| |-- DependencyInjection
| ` -- Persistence
| ` -- MySqlVideoRepository .php // An implementation of the repository
` -- Shared // Shared Kernel: Common infrastructure and domain shared between the different Bounded Contexts
|-- Domain
` -- Infrastructure
我們的儲存庫盡可能簡單,通常僅包含 2 個方法search
和save
。如果我們需要一些帶有更多過濾器的查詢,我們使用Specification
模式也稱為Criteria
模式。所以我們加入一個searchByCriteria
方法。
您可以在此處查看範例及其實作。
您可以在此處查看聚合範例。所有聚合都應擴展 AggregateRoot。
指令匯流排有 1 種實作。
查詢總線使用 Symfony 訊息匯流排。
事件匯流排使用 Symfony 訊息匯流排。 MySql Bus 使用 MySql+Pulling 作為總線。 RabbitMQ 匯流排使用 RabbitMQ C 擴充。
每次發布領域事件時,都會將其匯出到 Prometheus。您可以在此處存取 Prometheus 面板。
缺少一些東西(添加招搖,改進文件...),如果您願意,請隨意添加!如果您需要一些指南,請隨時與我們聯繫:)
此程式碼在 From 框架透過 #DDD 對話將程式碼耦合到 #microservices 中進行了展示,疑問在 DDD y CQRS:Preguntas Frecuentes 影片中得到了解答。
在 CodelyTV Pro 課程中使用: