jafar-albadarneh / laravel-ddd
在领域驱动设计(DDD)架构中构建您的Laravel服务和操作
Requires
- php: ^8.0|7.4
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-faker: ^1.0
- pestphp/pest-plugin-global-assertions: ^1.0
- pestphp/pest-plugin-laravel: ^1.1
- pestphp/pest-plugin-mock: ^1.0
- pestphp/pest-plugin-parallel: ^1.2
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- spatie/laravel-ray: ^1.26
- spatie/pest-plugin-test-time: ^1.1
- dev-main
- 0.4.0
- 0.3.0
- 0.2.0
- 0.1.0
- dev-dependabot/github_actions/aglipanci/laravel-pint-action-2.2.0
- dev-update/readme
- dev-dependabot/github_actions/dependabot/fetch-metadata-1.3.6
- dev-feature/laravelly-command-names
- dev-dependabot/github_actions/ramsey/composer-install-2
- dev-readme
- dev-dev
- dev-feature/generate-dtos
This package is auto-updated.
Last update: 2024-09-20 13:41:32 UTC
README
在一个领域驱动环境中,您希望保持代码尽可能干净和有序。此包允许在您的Laravel应用程序中创建领域驱动架构。该包假设以下代码结构
- app - Domains - [DomainA] - Actions - Events - Http - Listeners - Models - Services
按设计,每个领域都应独立处理,其中所有操作和服务都限定在领域范围内。
关于跨领域通信,您可以在领域级别创建一个代理服务来弥合领域之间的通信差距。内部您可以自由选择以下方式
- 直接注入类服务
- 遵循内部发布/订阅机制,在(领域X)发布事件并在其他领域(领域Y、领域Z等)中监听它们。
安装
您可以通过composer安装此包
composer require jafar-albadarneh/laravel-ddd
使用方法
该包配备了命令行工具,允许您在Laravel应用程序中创建领域驱动架构。这些命令行工具包括
生成领域
在确定领域后,您可以通过运行以下命令来生成它
php artisan make:domain [domain-name]
该命令接受以下选项
[domain-name]
:您想要创建的领域名称。--with-samples=1
:如果您希望生成包含示例操作和服务的领域。
生成领域服务
在创建领域后,您可以通过运行以下命令来生成服务
php artisan make:service domain=[domain-name]
该命令接受以下选项
domain=[domain-name]
:您想要生成服务的领域名称。--name=[service-name]
:如果您想要生成具有自定义名称的服务。
生成领域操作
在创建领域后,您可以通过运行以下命令来生成操作
php artisan make:action domain=[domain-name] --name=[action-name]
该命令接受以下选项
domain=[domain-name]
:您想要生成操作的领域名称。--name=[action-name]
:领域内的动作类名称。
生成领域DTO
在创建领域并确定服务后,您可以通过运行以下命令来生成DTO
php artisan make:dto domain=[domain-name] --name=[dto-name]
该命令接受以下选项
domain=[domain-name]
:您想要生成DTO的领域名称。--name=[dto-name]
:领域内的DTO类名称。
生成领域DTO
在创建领域后,您可以通过运行以下命令来生成DTO以支持服务之间的数据流
php artisan make:dto domain=[domain-name] --name=[dto-name]
该命令接受以下选项
domain=[domain-name]
:您想要生成操作的领域名称。--name=[action-name]
:领域内的DTO类名称。
生成原生Laravel资源
如果您无法将原生Laravel资源(控制器、请求、资源、中间件)与领域关联,您将无法充分利用此包。有两种方法可以实现这一点
1- Laravel artisan命令已支持将命名空间传递给任何命令。因此,您可以将资源放在App\Http
命名空间中,而不是将资源前缀为完整的领域命名空间。例如,如果您想为Authentication
领域创建一个控制器,您可以运行以下命令
php artisan make:controller \\App\\Domains\\Authentication\\Http\\Controllers\\LoginController
2- [待办] 该包覆盖了Laravel artisan命令以支持将领域名称传递给命令。因此,您不需要传递领域的完整命名空间,而是可以在命令中传递--domain=[domain-name]
参数。
注意:此功能尚未实现。
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全漏洞
请查看我们关于如何报告安全漏洞的安全策略。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。