oleglfed/laravel-ddd

为 Laravel 领域驱动开发生成领域

v1.1 2017-08-25 21:22 UTC

This package is not auto-updated.

Last update: 2024-09-29 04:08:37 UTC


README

领域驱动开发领域生成器。

image image Build Status StyleCI

此包旨在根据数据库表生成领域。包获取所有表字段并创建领域。使用领域创建仓库、服务和基础设施。此外,包自动将生成的类绑定到您的应用程序中,因此您可以使用 DI 或通过合同创建服务 $service = app(UserServiceInterface::class);

php artisan make:domain User --table=users

安装

使用以下命令通过 composer 安装此包

$ composer require oleglfed/laravel-ddd

转到您的 config/app.php 并添加服务提供者

\oleglfed\LaravelDDD\LaravelDddServiceProvider::class

使用

此包创建 app/Domainapp/Infrastructure 目录。因此,首先包应该能够创建这两个目录。之后,您可以撤销 app 目录的可写访问权限。

此包需要可写权限到 config/domains 目录。在使用之前,创建具有可写权限的 config/domains 目录,或者允许包写入 config 目录。这对于写入领域绑定是必要的。之后,这些领域将通过 LaravelDddServiceProvider 绑定到您的应用程序中

$ php artisan make:domain User --table=users

要生成领域,请使用 make:domain artisan 命令。此命令将在 app/ 目录内的域和基础设施目录中创建领域类。

例如,对于用户将创建以下类

UserEloquent

UserRepository

EloquentUserRepository

UserService

并为这些类创建合同

可用的命令选项

高级使用

此包包含一些用于处理服务和仓库的有用方法。

    public function index(UserServiceInterface $service)
    {
        $service->all(); //Shows all records
        
        $service->get(1); //Shows record with ID: 1
        
        $servcie->findWhere(['first_name' => 'Oleg']); //Returns all records with provided where
        
        $servcie->deleteWhere(['first_name' => 'Oleg']); //Deletes all records with provided where
        
        $servcie->firstOrCreate(['email' => 'oleg.fedoliak@gmail.com']); //Returns a record with provided where, or creates it
        
        $servcie->firstOrNull(['email' => 'oleg.fedoliak@gmail.com']); //Returns a record with provided where, or null
       
        $servcie->lists(20, 10, ['first_name', 'email']); //Returns paginated list with `per page`, `offset`, `columns` (all by default) 
        
        $servcie->count(); //Returns count of records 
        
        //Create
        $user = $service->newInstance();
        $user->setFirstName('Oleg');
        $user->setEmail('oleg.fedoliak@gmail.com');
        
        $user = $servcie->create($user);
        
        //Update
        $user->setFirstName('John');
        $user = $servcie->update($user);
        
        //Save. There is a method which will check if record is exists, and if so will update it. Otherwise create it.
        $user = $servcie->save($user);

        //Delete
        $isDeleted = $servcie->delete($user);
    }

如果您的路由使用 resource,您可以显式绑定域。打开 Providers\RouteServiceProvider 并添加

    \Route::model('user', App\Domains\User\UserEloquent::class);

然后您可以使用

 public function update(Request $request, UserInterface $user, UserServiceInterface $service)
 {
    dd($user); <-- will be dumped User Domain
 }        

许可证

Laravel DDD 生成器是免费软件,根据 MIT 许可证授权。