repositoriomaster/domain-maker

针对Laravel的领域驱动设计

1.0.0 2023-09-10 16:28 UTC

This package is auto-updated.

Last update: 2024-09-10 20:30:12 UTC


README

Software License

原因

领域驱动设计帮助我们组织思路,并使用代码的逻辑分组来构建应用程序。

如果你曾经参与过大型Laravel项目,你就知道模型目录可能会变得非常大,以至于你找到东西的能力会受到阻碍。

我受到了Spatie的Freek在https://freek.dev/1486-getting-started-with-domain-oriented-laravel这篇文章的启发,将其重构为领域。我爱这个!它使得在不遍历整个代码库的情况下,专注于特定问题变得更加容易。如果我在处理支付,我就生活在支付领域。

我很快意识到将重构为DDD非常直接,但我已经习惯了Laravel中那种美妙的开发体验,但在这里有些不足。

此外,如果我知道我的项目将会很大,并且我想要提前开始,使用DDD进行开发呢?

这就是这个包存在的原因。

域制造商如何帮助您?

域制造商通过提供一套命令来创建脚手架和样板文件,使Laravel的域驱动开发更容易,这些文件通常是针对域导向结构定制的。

  • 有用的命令
    • 自动创建一个新的域,包括通常需要的目录和类
    • 创建控制器
    • 创建路由文件
    • 创建模型
    • 创建仓库
  • 自动路由发现(无需在RouteServiceProvider中注册路由)
  • 自动视图发现(无需将视图路径添加到配置中)

所有域制造商命令都在domain前缀下。

 domain:make:controller        Create a new controller class
 domain:make:domain            Create a new Domain
 domain:make:routes            Create a new routes for domain
 ...

安装

composer require repositoriomaster/domain-maker

用法

创建新域

php artisan domain:make:domain

如果这是第一个域,将在app/Domains下创建域目录以及指定的域。

Domains
└── Media
    ├── Exceptions
    ├── Http
    │   ├── Controllers
    │   │   ├── VimeoController.php
    │   │   └── YoutubeController.php
    │   ├── Middleware
    │   └── Requests
    │       └── YoutubeRequest.php
    ├── Jobs
    │   └── YoutubeSync.php
    ├── Models
    │   └── Youtube.php
    ├── Repositories
    │   └── YoutubeRepository.php
    ├── resources
    │   ├── css
    │   ├── js
    │   └── views
    │       └── youtube-home.blade.php
    ├── routes
    │   ├── Media.php
    │   ├── Vimeo.php
    │   └── Youtube.php
    └── Services

路由

通过domain:make:domain命令创建域时,将创建一个标准路由文件。

通过DomainRouteServiceProvider自动发现路由

要创建后续的路由文件,请使用

domain:make:routes  <domain-name> <route-file-name>

例如,如果我有“支付”域,并且我想分组我的Stripe路由,我会运行以下命令

domain:make:routes Payments Stripe

仓库

通过使用domain:make:repository,可以轻松生成具有标准CRUD的仓库。

domain:make:repository <domain-name> <repository-name> <model-name>

再次使用“支付”域来演示,我们可以使用以下命令

domain:make:repository Payments PaymentRepository Payment

占位符

将使用公共占位符作为默认值。如果占位符未发布,则备份包含在包中。

可能需要发布以覆盖(例如,routes.stub)的特定包占位符

如果您不需要修改占位符,则无需发布它们。

php artisan vendor:publish --tag=domain-stubs

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

致谢

安全性

如果您发现任何安全相关的问题,请通过电子邮件richard.t.rohrig@gmail.com联系,而不是使用问题跟踪器。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件