jafar-albadarneh/laravel-ddd

在领域驱动设计(DDD)架构中构建您的Laravel服务和操作


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

在一个领域驱动环境中,您希望保持代码尽可能干净和有序。此包允许在您的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)。有关更多信息,请参阅许可证文件