inium/laravel-mvcs

分层架构(分层架构,仓库/服务/DTO)在Laravel上的框架

0.7.3 2023-09-06 17:17 UTC

This package is auto-updated.

Last update: 2024-09-06 19:43:56 UTC


README

这是一个基于Laravel实现的Repository-Service Scaffolding的包。

概述

该包提供了一种Scaffolding,用于在Laravel中使用Repository - Service。

Laravel提供了易于实现Request & Response处理和Business Logic的Controller。然而,在这样的配置中,Business Logic的复用会受到限制。因此,一些Framework(如Spring Boot, NestJS)提供了分层架构模式(Repository - Service),将关注点(Response & Response, Business Logic, DB Logic等)分层。此外,对于大型项目,将关注点分离有利于项目的成功执行、复用以及持续的维护和运营。

Laravel没有提供实现这种分层架构所需的Scaffolding代码。因此,我们制作了一个包,用于在Laravel中生成用于实现Repository和Service的Scaffolding代码。

本包基于PHP 8.1 / Laravel 9运行。

功能

本包提供了包含REST API基本实现的Layered Architecture Scaffolding。

创建分层架构所需的Scaffolding

本包通过使用“使用方法”中的代码生成命令,自动生成以下项,以满足REST API基本实现的需求。REST API基本实现通过在Controller内注入Service Interface来使用。

运行环境

本包基于PHP 8.1 / Laravel 9运行。

使用方法

1. 安装包

在已安装Laravel 9.x的项目目录中,使用composer命令进行安装。

> composer require inium/laravel-mvcs

2. 代码生成

安装包后,使用以下命令生成repository - service Scaffolding代码。

> php artisan mvcs:create {moduleName} {option:--all|--module}

命令的参数如下。

  • moduleName: 类名,例如,对于论坛,可以是Board、Post、Comment等。
  • option: 生成选项,有两种。
    • --all:生成Request、Controller、Repository(interface, concrete)、Service(interface, concrete)、DTO + Model、Database(factories、migrations、seeders)的Scaffolding。如果没有option,则默认使用。
    • --module:在--all选项中,除了Model和Database外,生成Request、Controller、Repository(interface, concrete)、Service(interface, concrete)、DTO的Scaffolding。

创建论坛的帖子类(Post)的示例如下。

  • 生成所有Scaffolding代码:php artisan mvcs:create Post --allphp artisan mvcs:create Post
  • 在--all选项中,除了Model和Database外,生成Scaffolding代码:php artisan mvcs:create Post --module

3.(可选)生成interface - concrete类的Bind代理Provider

在生成代码后,为了使用Repository和Service类,需要在AppServiceProvider中将interface - concrete类bind

然而,如果bind的interface - concrete类很多,则必须手动输入。因此,本包提供了一种按预定规则将interface - concrete Scaffolding发布到app/Modules目录的Service Provider,以简化此过程。

注意:如果使用提供的Service Provider,则无法修改特定interface - concrete类的bind。

例如,如果要将PostServiceInterface -> PostService更改为PostServiceInterface -> PostNewService,则无法在提供的Service Provider类中进行更改。在这种情况下,应停止使用提供的Service Provider,并直接bind

3-1. 发布provider

执行以下命令将创建app/Providers内的MvcsServiceProvider.php。此类实现了通过本包的命令绑定生成的interface-concrete类的代码。

> php artisan vendor:publish --tag=mvcs-provider

3-2. 在config/app.php中注册Provider

为了使用发布的provider,需要在config/app.php的providera项中按以下方式注册provider。

// config/app.php
return [
  ...
  "providers" => [
    ...
    /*
     * Package Service Providers...
     */
    App\Providers\MvcsServiceProvider::class,
    ...
  ]
];

示例

使用本包实现的论坛、帖子、帖子评论的代码已按Laravel结构存储在example目录中,供参考。

许可证

MIT